perm filename PASCAL.DIF[PAS,SYS]3 blob
sn#472066 filedate 1979-09-09 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00049 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00008 00002 1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 1,1
C00014 00003 1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 1,1
C00020 00004 1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 1,1
C00025 00005 1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 3,3
C00029 00006 1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 4,4
C00033 00007 1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 6,6
C00036 00008 1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 6,6
C00039 00009 1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 9,9
C00045 00010 1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 9,9
C00050 00011 1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 9,9
C00055 00012 1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 9,9
C00060 00013 1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 9,9
C00066 00014 1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 9,9
C00072 00015 1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 9,9
C00077 00016 1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 9,9
C00082 00017 1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 9,9
C00087 00018 1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 9,9
C00092 00019 1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 9,9
C00096 00020 1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 10,13
C00100 00021 1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 11,14
C00104 00022 1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 11,14
C00108 00023 1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 12,15
C00113 00024 1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 12,15
C00117 00025 1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 12,15
C00121 00026 1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 13,16
C00124 00027 1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 15,18
C00127 00028 1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 15,18
C00130 00029 1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 15,18
C00133 00030 1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 16,19
C00136 00031 1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 16,19
C00139 00032 1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 16,19
C00141 00033 1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 17,20
C00144 00034 1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 17,20
C00146 00035 1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 17,21
C00149 00036 1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 21,25
C00152 00037 1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 23,27
C00155 00038 1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 23,27
C00158 00039 1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 28,32
C00161 00040 1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 29,33
C00164 00041 1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 30,34
C00167 00042 1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 32,36
C00170 00043 1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 32,36
C00173 00044 1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 32,36
C00176 00045 1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 32,36
C00179 00046 1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 36,40
C00182 00047 1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 37,41
C00185 00048 1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 38,42
C00188 00049 1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 38,42
C00189 ENDMK
C⊗;
1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 1,1
**** File 1) PASCAL.BKP[PAS,SYS], Page 1 line 1
1) COMMENT ⊗ VALID 00038 PAGES
1) C REC PAGE DESCRIPTION
1) C00001 00001
1) C00006 00002 (*$T-,S1500,R120*) (*STANFORD LOTS PASCAL COMPILER*)
1) C00014 00003 (*HISTORY*)
1) C00028 00004 (*SWITCHES - OPTIONS*)
1) C00034 00005 (*NAMING CONVENTIONS*)
1) C00036 00006 (*IMPLEMENTATION: WHAT YOU NEED AND HOW YOU DO IT*)
1) C00045 00007 (*LIMITATIONS*)
1) C00047 00008 (*MAINTENANCE INFORMATION*)
1) C00053 00009 (* GLOBAL DECLARATIONS. *)
1) C00063 00010 TYPE
1) C00081 00011 VAR
1) C00106 00012 (* INITPROCEDURES. *)
1) C00171 00013 (* INIT_COMPILE, PUTADR, LOCATION, INITPASSGO, ERROR *)
1) C00179 00014 (*SYMBOL TABLE INIT: ENTERID, ENTERSTDTYPES, ENTERSTDNAMES, ENTERUNDECL*)
1) C00206 00015 (*GET_DIRECTIVES*)
1) C00220 00016 (* COMPILE[ NEWPAGER, WRITEBUFFER, GETNEXTLINE, FINISHLINE, ERROR_WITH_TEXT, WARNING*)
1) C00231 00017 (*INSYMBOL[NEXTCH, SKIPCOMMENT[OPTIONS], SKIP_E_DIRECTORY*)
1) C00250 00018 (*SEARCHSECTION, SEARCHID, SKIPIFERR, IFERRSKIP, ERRANDSKIP*)
1) C00255 00019 (* BLOCK[ TYPE CHECKING: CONSTANT, GETBOUNDS, STRING, COMPTYPES[CHECKSSTRING[ISMAGIC]] *)
1) C00268 00020 (* TYPEDEFINITION (TYPE DEFINITION PARSER) *)
1) C00295 00021 (* PARSING OF DECLARATIONS: LABELDECLARATION, CONSTANTDECLARATION, TYPEDECLARATION, VARIABLEDECLARATION *)
1) C00324 00022 (* BODY[GENERATE_WORD,INSERT_ADDRESS,INCREMENT_REGC,DEPOSIT_CONSTANT,MACRO..,PUT_PAGENUMBER,PUT_LINENUMBER,SUPPORT,ALFACONSTANT*)
1) C00337 00023 (*CLOSEFILES, ENTERBODY, LEAVEBODY*)
1) C00358 00024 (*FETCH_BASIS,GET_PARAMETER_ADDRESS,GENERATE_CODE,LOAD,STORE,LOAD_ADDRESS*)
1) C00371 00025 (* WRITE_MACHINE_CODE[ AND ITS PARTS. *)
1) C00412 00026 (* PARTS. ]WRITE_MACHINE_CODE. *)
1) C00430 00027 (* STATEMENT[ MAKEREAL, SELECTOR[SUBLOWBOUND] *)
1) C00444 00028 (* PROFUNCALL[GETFILENAME,GETPUTRESETREWRITE,READREADLN,BREAKCALL,WRITEWRITELN,MESSAGECALL*)
1) C00470 00029 (* PACKUNPACK, NEWDISPOSE, FIRSTLAST, LOWERUPPERBOUND *)
1) C00491 00030 (*MINMAX,GETLINENRCALL,PAGECALL,DATECALL,TIMECALL,CLOCKCALL,CARDCALL*)
1) C00499 00031 (*ABSCALL,REALTIMECALL,SQRCALL,ODDCALL,ORDCALL,CHRCALL,PREDSUCC,EOFEOLN,PROTECTION,CALLTOCALL[GETSTRINGADDRESS],HALTCALL*)
1) C00508 00032 (*CALL_NON_STANDARD[COMPPARAM,CHECKSSTRINGCALLS,CHARCONSTANT] ]PROFUNCALL*)
1) C00533 00033 (* EXPRESSION[CHANGEBOOL, SEARCHCODE, SIMPLEEXPRESSION[TERM[FACTOR]]] *)
1) C00565 00034 (* ASSIGNMENT[STOREGLOBALS[STOREWORD,GETNEWGLOBPTR]] *)
1) C00576 00035 (*GOTOSTATEMENT,COMPOUNDSTATEMENT,IFSTATEMENT,CASESTATEMENT,REPEATSTATEMENT,WHILESTATEMENT,FORSTATEMENT,LOOPSTATEMENT,WITHSTATEMENT*)
1) C00599 00036 (* ]STATEMENT ]BODY ]BLOCK *)
1) C00612 00037 (* ]COMPILE,REPORTTIME,JUMPTO *)
1) C00622 00038 (* MAIN BODY *)
1) C00634 ENDMK
1) C⊗;
1) (*$T-,S1500,R120*) (*STANFORD LOTS PASCAL COMPILER*)
1) (********************************************************************************
**** File 2) PASCAL.PAS[PAS,SYS], Page 1 line 1
2) COMMENT ⊗ VALID 00042 PAGES
2) C REC PAGE DESCRIPTION
1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 1,1
2) C00001 00001
2) C00006 00002 (*$T-,D-,S1700,R30*) (*STANFORD LOTS PASCAL COMPILER*)
2) C00014 00003 (*HISTORY*)
2) C00028 00004 (*SWITCHES - OPTIONS*)
2) C00035 00005 (*NAMING CONVENTIONS*)
2) C00037 00006 (*IMPLEMENTATION: WHAT YOU NEED AND HOW YOU DO IT*)
2) C00046 00007 (*LIMITATIONS*)
2) C00048 00008 (*MAINTENANCE INFORMATION*)
2) C00054 00009 (*THE SYMBOL TABLE DATA STRUCTURE*)
2) C00084 00010 (*LINKAGE CONVENTIONS*)
2) C00097 00011 (*PACKING POLICY*)
2) C00103 00012 (* GLOBAL DECLARATIONS. *)
2) C00113 00013 TYPE
2) C00132 00014 VAR
2) C00157 00015 (* INITPROCEDURES. *)
2) C00222 00016 (* INIT_COMPILE, PUTADR, LOCATION, INITPASSGO, ERROR *)
2) C00230 00017 (*SYMBOL TABLE INIT: ENTERID, ENTERSTDTYPES, ENTERSTDNAMES, ENTERUNDECL*)
2) C00257 00018 (*GET_DIRECTIVES*)
2) C00270 00019 (* COMPILE[ NEWPAGER, WRITEBUFFER, GETNEXTLINE, FINISHLINE, ERROR_WITH_TEXT, WARNING*)
2) C00282 00020 (*INSYMBOL[NEXTCH, SKIPCOMMENT[OPTIONS], SKIP_E_DIRECTORY*)
2) C00291 00021 (*]INSYMBOL*)
2) C00302 00022 (*SEARCHSECTION, SEARCHID, SKIPIFERR, IFERRSKIP, ERRANDSKIP*)
2) C00307 00023 (* BLOCK[ TYPE CHECKING: CONSTANT, GETBOUNDS, STRING, COMPTYPES[CHECKSSTRING[ISMAGIC]] *)
2) C00320 00024 (* TYPEDEFINITION (TYPE DEFINITION PARSER) *)
2) C00347 00025 (* PARSING OF DECLARATIONS: LABELDECLARATION, CONSTANTDECLARATION, TYPEDECLARATION, VARIABLEDECLARATION, proceduredeclaration[parameterlist[ffparlist]] *)
2) C00376 00026 (* BODY[GENERATE_WORD,INSERT_ADDRESS,INCREMENT_REGC,DEPOSIT_CONSTANT,MACRO..,PUT_PAGENUMBER,PUT_LINENUMBER,SUPPORT,ALFACONSTANT,ADDNEWCOUNTER*)
2) C00389 00027 (*CLOSEFILES, ENTERBODY, LEAVEBODY*)
2) C00410 00028 (*FETCH_BASIS,GET_PARAMETER_ADDRESS,GENERATE_CODE,LOAD,STORE,LOAD_ADDRESS*)
2) C00423 00029 (* WRITE_MACHINE_CODE[ AND ITS PARTS. *)
2) C00464 00030 (* PARTS. ]WRITE_MACHINE_CODE. *)
2) C00482 00031 (* STATEMENT[ MAKEREAL, SELECTOR[SUBLOWBOUND] *)
2) C00496 00032 (* PROFUNCALL[GETFILENAME,GETPUTRESETREWRITE,READREADLN,BREAKCALL,WRITEWRITELN,MESSAGECALL*)
2) C00522 00033 (* PACKUNPACK, NEWDISPOSE, FIRSTLAST, LOWERUPPERBOUND *)
2) C00543 00034 (*MINMAX,GETLINENRCALL,PAGECALL,DATECALL,TIMECALL,CLOCKCALL,CARDCALL*)
2) C00551 00035 (*ABSCALL,REALTIMECALL,SQRCALL,ODDCALL,ORDCALL,CHRCALL,PREDSUCC,EOFEOLN,PROTECTION,CALLTOCALL[GETSTRINGADDRESS],HALTCALL*)
2) C00560 00036 (*CALL_NON_STANDARD[COMPPARAM,CHECKSSTRINGCALLS,CHARCONSTANT,saveexpr] ]PROFUNCALL*)
2) C00587 00037 (* EXPRESSION[CHANGEBOOL, SEARCHCODE, SIMPLEEXPRESSION[TERM[FACTOR]]] *)
2) C00619 00038 (* ASSIGNMENT[STOREGLOBALS[STOREWORD,GETNEWGLOBPTR]] *)
2) C00630 00039 (*GOTOSTATEMENT,COMPOUNDSTATEMENT,IFSTATEMENT,CASESTATEMENT,REPEATSTATEMENT,WHILESTATEMENT,FORSTATEMENT,LOOPSTATEMENT,WITHSTATEMENT*)
2) C00653 00040 (* ]STATEMENT ]BODY ]BLOCK *)
2) C00666 00041 (* ]COMPILE,REPORTTIME,JUMPTO *)
2) C00676 00042 (* MAIN BODY *)
2) C00688 ENDMK
2) C⊗;
2) (*$T-,D-,S1700,R30*) (*STANFORD LOTS PASCAL COMPILER*)
2) (********************************************************************************
***************
1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 1,1
**** File 1) PASCAL.BKP[PAS,SYS], Page 2 line 46
1) ********************************************************************************)
1) (* (* CONTENTS. *)
1) (*
1) PAGE 02 (*HISTORY
1) PAGE 03 (*DOCUMENTATION: NAMES AND FILES
1) PAGE 04 (*LIMITATIONS
1) PAGE 05 (*MAINTENANCE INFORMATION
1) PAGE 06 (* GLOBAL DECLARATIONS.
1) PAGE 07 TYPE
1) PAGE 08 VAR
1) PAGE 09 (* INITPROCEDURES.
1) PAGE 10 (* INIT_COMPILE, PUTADR, LOCATION, INITPASSGO, ERROR, GET_DIRECTIVES
1) PAGE 11 (*SYMBOL TABLE INIT: ENTERID, ENTERSTDTYPES, ENTERSTDNAMES, ENTERUNDECL
1) PAGE 12 (*GET_DIRECTIVES
1) PAGE 13 (* COMPILE[ NEWPAGER, WRITEBUFFER, GETNEXTLINE, FINISHLINE, ERROR_WITH_TEXT, WARNING
1) PAGE 14 (*INSYMBOL[NEXTCH, SKIPCOMMENT[OPTIONS], SKIP_E_DIRECTORY
1) PAGE 15 (*SEARCHSECTION, SEARCHID, SKIPIFERR, IFERRSKIP, ERRANDSKIP
1) PAGE 16 (* BLOCK[ TYPE CHECKING: CONSTANT, GETBOUNDS, STRING, COMPTYPES[CHECKSSTRING[ISMAGIC]]
1) PAGE 17 (* TYPEDEFINITION (TYPE DEFINITION PARSER)
1) PAGE 18 (* PARSING OF DECLARATIONS: LABELDECLARATION, CONSTANTDECLARATION, TYPEDECLARATION, VARIABLEDECLARATION
1) PAGE 19 (* BODY[GENERATE_WORD,INSERT_ADDRESS,INCREMENT_REGC,DEPOSIT_CONSTANT,MACRO..,PUT_PAGENUMBER,PUT_LINENUMBER,SUPPORT,ALFACONSTANT
1) PAGE 20 (*CLOSEFILES, ENTERBODY, LEAVEBODY
1) PAGE 21 (*FETCH_BASIS,GET_PARAMETER_ADDRESS,GENERATE_CODE,LOAD,STORE,LOAD_ADDRESS
1) PAGE 22 (* WRITE_MACHINE_CODE[ AND ITS PARTS.
1) PAGE 23 (* PARTS. ]WRITE_MACHINE_CODE.
1) PAGE 24 (* STATEMENT[ MAKEREAL, SELECTOR[SUBLOWBOUND]
1) PAGE 25 (* PROFUNCALL[GETFILENAME,GETPUTRESETREWRITE,READREADLN,BREAKCALL,WRITEWRITELN,MESSAGECALL
1) PAGE 26 (* PACKUNPACK, NEWDISPOSE, FIRSTLAST, LOWERUPPERBOUND
1) PAGE 27 (*MINMAX,GETLINENRCALL,PAGECALL,DATECALL,TIMECALL,CLOCKCALL,CARDCALL
1) PAGE 28 (*ABSCALL,REALTIMECALL,SQRCALL,ODDCALL,ORDCALL,CHRCALL,PREDSUCC,EOFEOLN,PROTECTION,CALLTOCALL[GETSTRINGADDRESS],HALTCALL
1) PAGE 29 (*CALL_NON_STANDARD[COMPPARAM,CHECKSSTRINGCALLS,CHARCONSTANT] ]PROFUNCALL
1) PAGE 30 (* EXPRESSION[CHANGEBOOL, SEARCHCODE, SIMPLEEXPRESSION[TERM[FACTOR]]]
1) PAGE 31 (* ASSIGNMENT[STOREGLOBALS[STOREWORD,GETNEWGLOBPTR]],
1) PAGE 32 (*GOTOSTATEMENT,COMPOUNDSTATEMENT,IFSTATEMENT,CASESTATEMENT,REPEATSTATEMENT,WHILESTATEMENT,FORSTATEMENT,LOOPSTATEMENT,WITHSTATEMENT
1) PAGE 33 (* ]STATEMENT ]BODY ]BLOCK
1) PAGE 34 (* ]COMPILE,REPORTTIME,JUMPTO
1) PAGE 35 (* MAIN BODY
1) *)
1) (*HISTORY*)
**** File 2) PASCAL.PAS[PAS,SYS], Page 2 line 47
2) *
2) ********************************************************************************)
2) (*HISTORY*)
***************
1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 3,3
**** File 1) PASCAL.BKP[PAS,SYS], Page 3 line 113
1) * (4)B CALL PCROSS AND PASS IT ITS PARAMETERS PROPERLY.
1) * (5)F USE A BIG VALUE FOR RUNCORE.
**** File 2) PASCAL.PAS[PAS,SYS], Page 3 line 113
2) * (4)B CALL PCREF AND PASS IT ITS PARAMETERS PROPERLY.
2) * (5)F USE A BIG VALUE FOR RUNCORE.
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 3 line 153
1) * TO LINK PROPERLY TO PCROSS; CALL DEBUG PROPERLY. (TO DO THIS,
1) * USE THE SAME FILEBLOCKS FOR STANDARD FILES IN PASSGO AND
**** File 2) PASCAL.PAS[PAS,SYS], Page 3 line 153
2) * TO LINK PROPERLY TO PCREF; CALL DEBUG PROPERLY. (TO DO THIS,
2) * USE THE SAME FILEBLOCKS FOR STANDARD FILES IN PASSGO AND
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 3 line 176
1) * BY PCROSS FROM 10-MAR-79.
1) * (29)B ADD THE PREDEFINED PROCEDURE SETRAN, AND MAKE CALLS
**** File 2) PASCAL.PAS[PAS,SYS], Page 3 line 176
2) * BY PCREF FROM 10-MAR-79.
2) * (29)B ADD THE PREDEFINED PROCEDURE SETRAN, AND MAKE CALLS
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 3 line 185
1) * (32)B MESSAGE WOULD BLOW WHEN NEEDING LAST A PASCAL-WRITTEN RUNTIME.
1) *
**** File 2) PASCAL.PAS[PAS,SYS], Page 3 line 185
2) * (32)B MESSAGE WOULD BLOW WHEN NEEDING LAST A PASCAL-WRITTEN RUNTIME. FIXED.
2) *
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 4 line 23
1) * [NO]LIST(+) - GENERATE LIST FILE OFF
**** File 2) PASCAL.PAS[PAS,SYS], Page 4 line 23
2) * [NO]LOG G+/G- SEND THE ERROR MESSAGES TO
2) * FILE SOURCE.LOG OFF
2) * [NO]LIST(+) - GENERATE LIST FILE OFF
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 4 line 49
1) * [NO]CREF(+) - GENERATE CROSS REFERENCE LIST OFF
1) * [NO]LINK - PROFUNCALL LINK-10 AFTER COMPILATION OFF
1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 4,4
1) * [NO]EXECUTE - LOAD AND RUN COMPILED PROGRAM OFF
**** File 2) PASCAL.PAS[PAS,SYS], Page 4 line 51
2) * [NO]PROFILE C+/C- CROSS REFERENCE LIST WITH
2) * STATEMENT EXECUTION COUNTS FOR
2) * EACH BASIC BLOCK. OFF
2) * [NO]TTY Y+/Y- EXTERNAL PROCEDURES READ FROM TTY ON
2) * [NO]OUTPUT O+/O- EXT. PROCS. WRITE INTO OUTPUT ON
2) * [NO]CREF(+) - GENERATE CROSS REFERENCE LIST OFF
2) * [NO]LINK - CALL LINK-10 AFTER COMPILATION OFF
2) * [NO]EXECUTE - LOAD AND RUN COMPILED PROGRAM OFF
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 6 line 26
1) * PCROSS.PAS : CROSS REFERENCE WITHOUT CODE-GENERATION
1) *
1) *
**** File 2) PASCAL.PAS[PAS,SYS], Page 6 line 26
2) * PCREF.PAS : CROSS REFERENCE WITHOUT CODE-GENERATION
2) *
2) * PFORM.PAS : PRETTYPRINTER (FORMATTER)
2) *
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 6 line 38
1) * PCROSS.EXE : PCROSS EXECUTABLE MODULE
1) * PASSGO.EXE : PASSGO EXECUTABLE MODULE.
1) *
**** File 2) PASCAL.PAS[PAS,SYS], Page 6 line 39
2) * PASSGO.EXE : PASSGO EXECUTABLE MODULE.
2) * PCREF.EXE : PCREF EXECUTABLE MODULE
2) * PFORM.EXE : PFORM EXECUTABLE MODULE.
2) *
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 6 line 45
1) *
**** File 2) PASCAL.PAS[PAS,SYS], Page 6 line 47
2) * PASCAL.HLP : A FAST REFERENCE GUIDE TO THE MAIN TOPICS OF THE MANUAL
2) * PASCAL.DOC : A DESCRIPTION OF SOME OF THE INSIDE PARTS OF THE COMPILER
2) *
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 6 line 84
1) * FILE DESCRIPTIONS FOR PASLIB AND PCROSS IN INITPROCEDURE
1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 6,6
1) * "SEARCH LIBRARIES")
**** File 2) PASCAL.PAS[PAS,SYS], Page 6 line 88
2) * FILE DESCRIPTIONS FOR PASLIB AND PCREF IN INITPROCEDURE
2) * "SEARCH LIBRARIES")
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 6 line 131
1) * @PCROSS
1) * OLDSOURCE = PASCAL.PAS
1) * NEWSOURCE = PASCAL.PAS/VERSION:11/COMM:U
1) * CROSSLIST = PASCAL.CRL/CROSS:1
1) * PCROSS: PASCAL [PASCAL] 1..
1) * 0 ERROR(S) DETECTED
1) * EXIT
1) * @PCROSS
1) * OLDSOURCE = PASCAL.PAS/NONEW
1) * CROSSLIST = PASC2.CRL/VERSION:1/CROSS:14
1) * PCROSS: PASCAL [PASCAL] 1..
1) * 0 ERROR(S) DETECTED
1) * EXIT
1) * @PCROSS
1) * OLDSOURCE = PASCAL.PAS/NONEW
1) * CROSSLIST = PASSGO.CRL/CROSS:14/VERSION:2
1) * PCROSS: PASCAL [PASSGO] 1..
1) * 0 ERROR(S) DETECTED
**** File 2) PASCAL.PAS[PAS,SYS], Page 6 line 135
2) * @PCREF
2) * OLDSOURCE = PASCAL.PAS
2) * CROSSLIST = PASCAL.LST/CROSS:1
2) * PCREF: PASCAL [PASCAL] 1..
2) * 0 ERROR(S) DETECTED
2) * EXIT
2) * @PCREF
2) * OLDSOURCE = PASCAL.PAS
2) * CROSSLIST = PASC2.LST/VERSION:1/CROSS:14
2) * PCREF: PASCAL [PASCAL] 1..
2) * 0 ERROR(S) DETECTED
2) * EXIT
2) * @PCREF
2) * OLDSOURCE = PASCAL.PAS
2) * CROSSLIST = PASSGO.LST/CROSS:14/VERSION:2
2) * PCREF: PASCAL [PASSGO] 1..
2) * 0 ERROR(S) DETECTED
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 6 line 153
1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 6,6
1) * 3) CHANGES TO PCROSS
1) *
1) * @LOAD PCROSS/LIST/COMPILE
1) * ...
1) * EXIT
1) * @SAVE PCROSS
1) *
**** File 2) PASCAL.PAS[PAS,SYS], Page 6 line 156
2) * 3) CHANGES TO PCREF
2) *
2) * @LOAD PCREF/LIST/COMPILE
2) * ...
2) * EXIT
2) * @SAVE PCREF
2) *
2) * 4) CHANGES TO PFORM
2) *
2) * @LOAD PFORM/LIST/COMPILE
2) * ...
2) * EXIT
2) * @SAVE PFORM
2) *
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 8 line 8
1) * WHEN YOU ADD ANY PROCEDURE OR FUNCTION TO THE LIBRARY, YOU
**** File 2) PASCAL.PAS[PAS,SYS], Page 8 line 7
2) *
2) * WHEN YOU ADD ANY PROCEDURE OR FUNCTION TO THE LIBRARY, YOU
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 9 line 1
1) (* GLOBAL DECLARATIONS. *)
**** File 2) PASCAL.PAS[PAS,SYS], Page 9 line 1
2) (*THE SYMBOL TABLE DATA STRUCTURE*)
2) (********************************************************************************
2) *
2) * DESCRIPTION OF THE DATA STRUCTURE THAT MAINTAINS THE SYMBOL TABLE IN THE
2) * PASCAL AND PASSGO COMPILERS FOR DEC-10,DEC-20, LOTS AND HAMBURG VERSIONS.
2) *
2) * ARMANDO R. RODRIGUEZ.
2) * 8-JUL-79
2) *
2) * ABSTRACT - INTRODUCTION
2) *
2) * THE SYMBOL TABLE IS FORMED WITH FIVE BASIC ELEMENTS: CONSTANT DESCRIPTOR
1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 9,9
2) * BLOCKS, VALUE DESCRIPTOR BLOCKS, IDENTIFIER DESCRIPTOR BLOCKS (CTP↑),
2) * STRUCTURE (TYPE, MAINLY) DESCRIPTOR BLOCKS (STP↑) AND A MAIN FRAME, THAT
2) * KEEPS THE SYMBOL TABLE AND IMPLEMENTS THE SCOPING MECHANISM (DISPLAY).
2) * THE FIRST TWO ONES ARE EXTREMELY SIMPLE, AND WILL NOT BE DESCRIBED IN THIS
2) * DOCUMENT. THE OTHER THREE ONES CONTAIN MOST OF THE USEFUL IMFORMATION.
2) * A BRIEF GLOBAL DESCRIPTION OF EACH RECORD IS MADE, AND AN EXPLANATION OF
2) * THE MEANING AND USAGE OF EACH FIELD FOLLOWS, RETAINNG THE CASEING STRUCTURE
2) * OF THE RECORD. AN EXCCEPTION IS MADE IN THAT THE DUMMY FIELDS ARE ALL DES-
2) * CRIBED TOGETHER. WHEN IT SEEMS APPROPRIATE, AN EXPLANATION IS GIVEN ON THE
2) * MEANING AND PURPOSE OF EACH OF THE POSSIBLE VALUES OF A GIVEN FIELD.
2) * THE APPROACH IS NOT PURELY INFORMAL, BUT IT IS NOT ABSOLUTELY RIGUROUS.
2) * THE INTENTION IS TO BE RIGUROUS ENOUGH TO PREVENT AMBIGUITIES.
2) * COMMENTS AND CRITICISMS ON THIS DRAFT ARE WELCOME, ENCOURAGED AND APPRECIATED.
2) * (SEE ADDRESS INFORMATION IN THE LAST PAGE).
2) *
2) * EXPLANATION OF SOME TERMS:
2) *
2) * CHAIN: THE LINKER PROVIDES A FEATURE THAT THIS COMPILER TAKES GOOD ADVANTAGE
2) * OF: WHEN AN ADDRESS IS NEEDED THAT IS NOT KNOWN, A "PATCHBACK REQUEST"
2) * CAN BE ISSUED (INTERNALREQUEST, ITEM_10 IS USED FOR GOTOS AND CALLS TO FORWARD
2) * PROCEDURES, AND A SYMBOLS, ITEM_2, FOR EXTERNAL PROCEDURE AND RUNTIME CALLS).
2) * THE REQUEST PROVIDES THE ADDRESS OF THE INSTRUCTION THAT NEEDS IT AND IS
2) * SITUATED IN THE HIGHEST POSITION IN MEMORY. THERE, INSTEAD OF THE ADDRESS THAT
2) * WILL BE PATCHED BACK, THE ADDRESS OF THE NEXT HIGHEST REQUESTOR IS KEPT, SO
2) * FORMING A BACKWARDS (TOP-DOWN?) CHAIN OF REQUESTORS OF THE SAME ADDRESS. THE
2) * LAST ELEMENT OF THE CHAIN CONTAINS A ZERO (0). THE CURRENT TOP OF THAT CHAIN
2) * IS KEPT IN FIELD GOTO_CHAIN FOR LABELS, LINKCHAIN FOR PROCS/FUNCS, AND ...
2) * VECTORCHAIN FOR SCALARS. SINCE THE LINKER DOES NOT PARTICIPATE IN PASSGO RUNS,
2) * PASSGO DOES THA BACKPATCHING ITSELF WITH THE PROCEDURE WALKCHAIN, INSTEAD OF
2) * THE REQUEST MADE BY PASCAL USING THE PROCEDURE WRITE_PAIR.
2) *
2) * BASE TYPE AND HOST TYPE: THIS IS THE TERMINOLOGY USED IN THE PROPOSED ISO
2) * STANDARD FOR PASCAL. BASE TYPE REFERS TO THE TYPE OF
2) * THE ELEMENTS OF A SET, AND HOST TYPE REFERS TO THE ORIGINAL TYPE FROM WHICH A
2) * CLOSED INTERVAL DEFINES A SUBRANGE TYPE.
2) *
2) * LEVEL AND SCOPE: AN IDENTIFIER DEFINED AT A GIVEN LEVEL IS ASSIGNED THAT LEVEL.
2) * ITS SCOPE IS ALL LEVELS WITH A NUMERICAL VALUE HIGHER THAN
2) * ITS OWN, THAT ARE NOT IN THE SCOPE OF ANOTHER IDENTIFIER WITH THE SAME NAME AND
2) * A LEVEL WITH A NUMERICAL VALUE HIGHER THAN ITS OWN. LEVEL 0 IS ASSIGNED TO PRE-
2) * DECLARED OBJECTS, LEVEL 1 TO GLOBAL OBJECTS (DECLARED IN THE MAIN BLOCK) AND
2) * LEVELS 2 AND UP TO THE LOCAL OBJECTS INSIDE PROCEDURES AND FUNCTIONS.
2) *
2) * THE STRUCTURE DESCRIPTOR BLOCK:
2) *
2) * ITS MAIN PURPOSE IS TO DESCRIBE A TYPE BY ITS STRUCTURE. NO NAMING IS
2) * MANAGED DIRECTLY BY THIS RECORD, ALTHOUGH IT WILL POINT TO IDENTIFIER
2) * DESCRIPTORS IN THE CASE OF DECLARED SCALARS AND FIELDS OF RECORDS.
1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 9,9
2) * THE VALUES OF SCALKIND: TAGFWITHID, TAGFWITHOUTID AND VARIANT ARE USED TO
2) * DESCRIBE PARTS OF A RECORD STRUCTURE. ALL THE OTHER VALUES HAVE OBVIOUS
2) * MEANINGS. (POWER STANDS FOR POWERSET).
2) *
2) * STP: POINTER TO A STRUCTURE DESCRIPTOR RECORD
2) * STRUCTURE: STRUCTURE DESCRIPTOR RECORD.
2) * DB0, DB1, DB2, DB3, DB4, DB5, DB6, DB7, DB9: DUMMY FIELDS USED TO GET
2) * BETTER ADDRESSING IN THE OTHER FIELDS.
2) * SELFSTP: USED TO BUILD THE DEBUGGER TABLES: A COPY OF THIS RECORD, WITH
2) * THE POINTER VALUES CHANGED TO BE MEANINGFUL AT RUNTIME.
2) * SIZE: MEMORY SPACE NEEDED BY A VARIABLE OF THIS TYPE, IN WORDS.
2) * NOCODE: FLAG SET WHILE DUMPING THE DEBUGGING INFORMATION, TO PREVENT
2) * FROM DUMPING A RECORD TWICE.
2) * BITSIZE: MEMORY SPACE NEEDED, IN BITS, IF THIS TYPE IS USED TO BUILD A
2) * PACKED STRUCTURE. (IF SIZE > 1 WORD, BITSIZE = 1 WORD).
2) *
2) * FORM: FLAG TO DISTINGUISH THE DIFFERENT STRUCTURES. THE NAMES ARE OBVIOUS,
2) * AND BRIEFLY DESCRIBED BELOW.
2) *
2) * SCALAR: A SIMPLE TYPE, EXCEPT FOR SUBRANGES.
2) * SCALKIND: STANDARD: INTEGER, REAL OR ASCII (CHAR IS A SUBRANGE)
2) * DECLARED: NAMED SCALARS, INCLUDING BOOLEANS.
2) * FCONST: POINTER TO THE IDENTIFIER DESCRIPTOR FOR THE FIRST MEMBER
2) * OF THIS TYPE. THEY WILL BE CHAINED BY THEIR NEXT FIELD.
2) * VECTORADDR: ADDRESS OF THE STRING CONSTANT THAT CONTAINS ALL THE
2) * NAMES OF THE ELEMENTS, ORDERED FROM VALUE ZERO.
2) * VECTORCHAIN: TOP OF THE CHAIN OF REFERENCES TO VECTORADDR.
2) * SEE EXPLANATION ON CHAINS ABOVE.
2) * DIMENSION: ORD(LAST(THIS TYPE)): THE MAXIMUM VALUE THAT IS DEFINED
2) * BY A NAME IN THIS TYPE. IT IS ALSO THE NUMBER OF
2) * ELEMENTS MINUS ONE.
2) * NEXTSCALAR: ALL TYPE DESCRIPTORS THAT DESCRIBE DECLARED (NAMED)
2) * SCALARS ARE CHAINED THROUGH THIS FIELD, TO SIMPLIFY
2) * THE DUMP OF THEIR NAME STRINGS IN WRITE_MACHINE_CODE
2) * REQUEST: FLAG THAT SETS TRUE IF ANY FORMATTED I/O (READ/WRITE) IS
2) * DONE ON THIS TYPE, OR IT DEFINES A PARAMETER TO AN
2) * EXTERNAL PROCEDURE. USED TO DECIDE WHETHER TO DUMP
2) * THE STRING OF NAMES FOR RUNTIME USE.
2) * TLEV: THE SCOPING LEVEL AT WHICH THE TYPE WAS DEFINED.
2) *
2) * SUBRANGE: SUBRANGE TYPE. INCLUDES CHAR.
2) * RANGETYPE: POINTER TO THE STRUCTURE DESCRIPTOR OF THE HOST TYPE.
2) * VMIN, VMAX: MINIMUM AND MAXIMUM VALUES OF THE CLOSED RANGE THAT
2) * DEFINES THE SUBRANGE. (SUBRANGES OF REAL ARE SUPPOR-
2) * TED).
2) *
2) * POINTER: POINTER TYPE.
2) * ELTYPE: POINTER TO THE STRUCTURE DESCRIPTOR OF THE TYPE THIS TYPE
1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 9,9
2) * WILL POINT TO.
2) *
2) * POWER: SET TYPE.
2) * ELSET: POINTER TO THE STRUCTURE DESCRIPTOR OF THE BASE TYPE.
2) *
2) * ARRAYS: ARRAY TYPE.
2) * ARRAYPF: "PACKED FLAG": TRUE IF THE ELEMENTS OF THIS ARRAY ARE PACKED
2) * ARRAYBPADDR: ADDRESS OF A WORD IN DATA AREA RESERVED FOR A BYTE POINTER
2) * USED FOR ADDRESSING ELEMENTS OF THIS ARRAY.
2) * AELTYPE: POINTER TO THE STRUCTURE DESCRIPTOR OF THE TYPE OF THE ELEMENT
2) * OF THIS ARRAY.
2) * INXTYPE: POINTER TO THE STRUCTURE DESCRIPTOR OF THE TYPE OF THE SUBS-
2) * CRIPT OF THIS ARRAY.
2) *
2) * RECORDS: RECORD TYPE.
2) * RECORDPF: "PACKED FLAG".
2) * FSTFLD: POINTER TO THE IDENTIFIER DESCRIPTOR OF THE FIRST FIELD OF THE
2) * NON-VARIANT PART OF THIS RECORD. THEY WILL BE CHAINED THROUGH
2) * THE NEXT FIELD.
2) * RECVAR: POINTER TO A STRUCTURE DESCRIPTOR OF FORM TAGFWITHID OR ...
2) * TAGFWITHOUTID, FROM WHICH THE DESCRIPTION OF THE VARIANT PART
2) * HANGS. NIL IF NO VARIANT PART.
2) *
2) * FILES: FILE TYPE.
2) * FILETYPE: POINTER TO THE STRUCTURE DESCRIPTOR OF THE TYPE OF THE
2) * ELEMENTS THAT FORM THE SEQUENCE IN THIS FILE, OR, IN OTHER
2) * WORDS, THE TYPE OF THE SO-CALLED FILE_BUFFER_VARIABLE.
2) * FILEFORM: BINARY VALUE USED BY RUNTIMES TO DISTINGUISH A FILE THAT WILL
2) * BE USED WITH FORMATTED I/O (TEXT_FILE) FROM ONE THAT NEEDS
2) * STANDARD I/O (DATA_FILE).
2) * FILEMODE: BINARY VALUE USED BY THE RUNTIMES TO DISTINGUISH A FILE THAT
2) * HAS BYTE-LONG ELEMENTS (TEXT, PACKED FILE OF ASCII) FROM
2) * ONE THAT HAS N-WORD-LONG ELEMENTS (ALL OTHER FILES).
2) *
2) * TAGFWITHID: A TAG FIELD THAT USES PHYSICAL MEMORY SPACE: POINTS TO
2) * THE ALTERANTIVE VARIANT PART DESCRIPTORS.
2) * TAGFWITHOUTID: SAME, FOR A TAG FIELD THAT DOES NOT USE MEMORY SPACE.
2) * FSTVAR: POINTER TO THE STRUCTURE DESCRIPTOR FOR ONE OF THE ALTERNATIVE
2) * VARIANT PARTS OF THIS RECORD AT THIS (CASING) LEVEL. NOTICE
2) * THAT THE LEXICAL LEVEL REMAINS THE SAME AS LONG AS THE TYPE
2) * OF A FIELD IS NOT A RECORD ITSELF, SO NESTED CASES ARE STILL
2) * AT THE SAME LEVEL. THE OTHER VARIANT ALTERNATIVES WILL BE
2) * CHAINED THROUGH THE NXTVAR FIELD.
2) * TAGFIELDP: POINTER TO THE IDENTIFIER DESCRIPTOR OF A TAGFWITHID.
2) * TAGFIELDTYPE: POINTER TO THE STRUCTURE DESCRIPTOR OF A TAGFWITHOUTID.
2) *
2) * VARIANT: THE STRUCTURE THAT IS 'ACTIVE' IN THE VARIANT PART OF A RECORD,
2) * WHEN THE CORRESPONDING TAG FIELD HAS SOME GIVEN VALUE.
1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 9,9
2) * NXTVAR: POINTER TO THE STRUCTURE DESCRIPTOR OF THE VARIANT PART FOR
2) * SOME OTHER VALUE OF THE TAG FIELD.
2) * SUBVAR: POINTER TO THE STRUCTURE DESCRIPTOR OF A TAGFWITHID OR OF A
2) * TAGFWITHOUTID THAT DESCRIBES A VARIANT PART CONTAINED IN THIS
2) * VARIANT PART, IF ANY. (E.G., IN THIS RECORD TYPE, STRUCTURE,
2) * THE VARIANT DESCRIPTOR FOR FORM = SCALAR POINTS THROUGH SUBVAR
2) * TO THE TAGFWITHID DESCRIPTOR FOR SCALKIND).
2) * FIRSTFIELD: POINTER TO THE IDENTIFIER DESCRIPTOR OF THE FIRST FIELD OF
2) * THIS VARIANT PART.
2) * VARVAL: VALUE THAT THE TAG FIELD SHOULD HAVE FOR THIS VARIANT TO BE
2) * 'ACTIVE'. (VALID/CURRENT).
2) *
2) * THE IDENTIFIER DESCRIPTOR BLOCK:
2) *
2) * ITS MAIN PURPOSE IS TO DESCRIBE THE MEANING AND PROPERTIES OF AN IDENTIFIER.
2) * NO STRUCTURAL INFORMATION IS REFLECTED DIRECTLY IN THIS RECORD, EXCEPT FOR THE
2) * FACT THAT DECLARED SCALARS, PARAMETER LISTS AND FIELDS ARE DESCRIBED BY A CHAIN
2) * OF IDENTIFIER DESCRIPTORS. THE NAMES USED IN THE MAIN VARIANT PART HAVE OBVIOUS
2) * MEANINGS.
2) *
2) * CTP: POINTER TO AN IDENTIFIER DESCRIPTOR RECORD.
2) *
2) * IDENTIFIER: IDENTIFIER DESCRIPTOR RECORD.
2) * VDUMMY1, VDUMMY2, HDUMMY, PDUMMY: DUMMY FIELDS USED TO GET BETTER ADDRESSING
2) * IN THE REST OF THE FIELDS.
2) * NAME: OF THE IDENTIFIER.
2) * LLINK, RLINK: TO KEEP THE IDENTIFIERS OF EACH LEVEL (SCOPE) ORGANIZED IN A
2) * BINARY SEARCH TREE, BY NAME.
2) * IDTYPE: POINTER TO THE STRUCTURE DESCRIPTOR OF THE TYPE OF THIS CONSTANT,
2) * VARIABLE, FIELD OR FUNCTION. NIL OTHERWISE.
2) * NEXT: USED TO FORM CHAINS OF IDENTIFIERS. DEPENDING ON KLASS, IT POINTS TO:
2) * IN KONST: (WHEN IT IS A MEMBER OF A DECLARED TYPE): THE MEMBER OF THE
2) * TYPE WITH THE INTERNAL VALUE IMMEDIATELY LOWER THAN THIS ONE.
2) * IN VARS: (WHEN THEY DESCRIBE A PARAMETER OF A PROCEDURE):
2) * THE NEXT PARAMETER.
2) * IN FIELD: NEXT FIELD OF THIS STATIC OR VARIANT PART OF THIS RECORD TYPE.
2) * IN PROC AND FUNC: (WHEN THEY ARE ACTUAL): THE FIRST PARAMETER.
2) * IN LABELS: NEXT LABEL THAT WAS DECLARED AT THIS SAME SCOPE LEVEL.
2) * (THIS CHAINS ARE COMPLEMENTARY. ALL IDENTIFIERS HANG FROM RLINK, LLINK).
2) * SELFCTP: USED TO BUILD THE DEBUGGER TABLES: A COPY OF THIS RECORD, WITH THE
2) * POINTER VALUES CHANGED TO BE MEANINGFUL AT RUNTIME.
2) * NOCODE: FLAG SET WHILE DUMPING THE DEBUGGING INFORMATION, TO PREVENT FROM
2) * DUMPING A RECORD TWICE.
2) *
2) * KLASS: FLAG TO DISTINGUISH THE DIFFERENT KINDS OF IDENTIFIERS. THE NAMES ARE
2) * OBVIOUS, AND ARE BRIEFLY EXPLAINED BELOW.
2) *
2) * KONST: A CONSTANT. (EITHER A NAME THAT DEFINES A NUMBER, AS DECLARED IN THE
1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 9,9
2) * CONST PART OF A PROGRAM, OR AN ELEMENT OF A DECLARED SCALAR TYPE)
2) * VALUES: ITS NUMERICAL VALUE.
2) *
2) * VARS: A VARIABLE. (EITHER A PARAMETER OR A LOCAL VARIABLE).
2) * VKIND: ACTUAL: LOCAL VARIABLE OR VALUE PARAMETER.
2) * FORMAL: VAR PARAMETER.
2) * VLEV: THE LEVEL (SCOPE) AT WHICH IT WAS DECLARED.
2) * CHANNEL: FOR VARIABLES THAT ARE FILES, THE ACTUAL HARDWARE CHANNEL NUMBER
2) * THAT WILL BE REQUESTED FOR IT AT RUNTIME.
2) * VADDR: ADDRESS OF THE PLACE IN MEMORY THAT WAS ASSIGNED TO IT. FOR LOCAL
2) * VARIABLES AND PARAMETERS, IT IS RELATIVE TO THE BASE OF THE STACK
2) * FRAME (POINTED TO BY ACREGISTER 16B). [2]
2) *
2) * FIELD: A FIELD OF A RECORD (EITHER IN A STATIC OR A VARIANT PART.)
2) * PACKF: "PACKED" FLAG: (IT SHOULD BE CALLED ALIGNMENT FLAG): INFORMATION
2) * ON THE LOCATION OF ITS STARTING ADDRESS: EITHER AT A WORD BOUN-
2) * DARY, OR AT A HALF-WORD BOUNDARY, OR AT SOME BIT POSITION INSIDE
2) * THE WORD, WHICH REQUIRES A BYTE POINTER TO ACCESS IT.
2) * NOTPACK,HWORDR,HWORDL: FLDADDR: ADDRESS OF THE FIELD, RELATIVE TO THE
2) * ADDRESS OF THE RECORD.
2) * PACKK: FLDBYTE: A DESCRIPTOR OF THE BYTEPOINTER USED TO REACH THIS FIELD.
2) *
2) * PROC, FUNC: A PROCEDURE OR FUNCTION (EITHER THE PROC/FUNC ITSELF, OR AN
2) * EXTERN OR FORWARD REFERENCE, OR A PROC/FUNC DECLARED AS A
2) * PARAMETER).
2) * PFDECLKIND: DISTINCTION BETWEEN STANDARD AND DECLARED. (NOTE: THIS IS
2) * NOT THE PASCAL LANGUAGE MEANING OF STANDARD AND DECLARED/PREDE-
2) * CLARED.)
2) * STANDARD: IT NEEDS SPECIAL PARSING, EITHER BECAUSE IT IS DECOMPO-
2) * SED INTO CALLS TO DIFFERENT RUNTIMES(READ/WRITE) OR BECAUSE IT
2) * TAKES NON-STANDARD PARAMETER LISTS (GET,PUT,BREAK,...) OR
2) * BECAUSE IT IS COMPILED INLINE (PACK/UNPACK, ABS,...).
2) * KEY: SUBSCRIPT FOR ITS NAME IN NA (STDFUNC OR STDPROC)
2) * DECLARED: IT HAS NO SPECIAL TREATMENT, SO A CALL TO IT WILL BE
2) * TREATED BY THE CALL_NON_STANDARD PROCEDURE.
2) * PFLEV: LEVEL AT WHICH IT WAS DECLARED.
2) * PARLISTSIZE: AMOUNT OF MEMORY SPACE NEEDED IN THE STACK FRAME FOR
2) * THE PARAMETERS.
2) * PFADDR: ADDRESS OF THE ENTRY POINT, FOR A LOCAL PROCEDURE.
2) * HIGHEST_REGISTER: HIGHEST REGISTER USED FOR PARAMETER PASSING.
2) * USUALLY 6. SEE THE DESCRIPTION OF THE /REGISTER:N SWITCH, OR
2) * $XN OPTION [1]. SEE ALSO [2]
2) * PFKIND: FLAG TO DISTINGUISH PARAMETER PROCEDURES.
2) * ACTUAL: NOT A PARAMETER PROCEDURE.
2) * FORWDECL: FLAG. TRUE IF IT WAS DECLARED FORWARD AND THE
2) * BODY HAS NOT BEEN COMPILED YET.
2) * EXTERNDECL: TRUE IF IT WAS DECLARED EXTERNAL OR IF IT IS A
2) * PREDECLARED PROCEDURE FROM THE RUNTIME LIBRARY.
1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 9,9
2) * ACTIVATED: TRUE WHILE PARSING INSIDE THE SCOPE OF THIS FUN-
2) * CTION, SO THAT ITS APPEARENCE IN THE LEFT SIDE
2) * OF AN ASSIGNMENT IS LEGAL.
2) * PFCHAIN: TO KEEP THREE CHAINS OF IDENTIFIER DESCRIPTORS:
2) * ONE FOR LOCAL, ONE FOR FORWARD REFERENCES, AND
2) * ONE FOR EXTERNAL REFERENCES, FOR ?, FOR INTER-
2) * NAL REQUESTS, AND FOR SYMBOL REQUESTS, RESPEC-
2) * TIVELY.
2) * LANGUAGE: EITHER PASCALSY OR FORTRANSY, TO APPLY THE DIFFE-
2) * RENT LINKAGE CONVENTIONS.
2) * TESTFWDPTR: CHAIN OF FORWARD PROCEDURES DECLARED AT THIS
2) * SCOPE. FOR TEST ON UNSATISFIED FORWARD DECLA-
2) * RATIONS.
2) * EXTERNALNAME: TO BE USED IN THE SYMBOLS REQUEST TO THE
2) * LINKER.
2) *
2) * LINKCHAIN: TOP OF THE CHAIN OF REFERENCES (CALLS) TO THIS
2) * PROCEDURE/FUNCTION. SEE EXPLANATION ON CHAINS
2) * ABOVE.
2) * FORMAL: A PARAMETER PROCEDURE/FUNCTION.
2) * FPARAM: POINER TO THE IDENTIFIER DESCRIPTOR OF THE FIRST
2) * PARAMETER TO THIS PROCEDURE. NOTE THAT THESE
2) * DESCRIPTORS HAVE NO NAME, AND ARE NOT INSERTED
2) * IN THE BINARY TREE. [1]. (IN ACTUAL PROCEDURES/
2) * FUNCTIONS, IT IS KEPT IN NEXT, BUT HERE NEXT
2) * POINTS TO THE NEXT OF THE PARAMETERLIST IN WHICH
2) * THIS PROCEDURE IS A MEMBER.)
2) *
2) * LABELS: A DECLARED LABEL.
2) * SCOPE: LEVEL AT WHICH IT WAS DECLARED, WHICH DEFINES ITS SCOPE.
2) * JUMP_INDEX: SUBSCRIPT INTO JUMP_TABLE, WHICH KEEPS THE ADDRESS WHERE
2) * THE ACREGISTERS 16B AND 17B (STACK FRAME BOUNDARIES)
2) * ARE SAVED ON ENTRY. USED FOR GOTOS OUT OF BLOCK.
2) * EXIT_JUMP: TRUE IF THIS LABEL IS THE SUBJECT OF A GOTO OUT OF BLOCK.
2) * GOTO_CHAIN: TOP OF THE CHAIN OF REFERENCES TO THIS LABEL. SEE
2) * EXPLANATION ON CHAINS ABOVE.
2) * LABEL_ADDRESS: THE ADDRESS IN MEMORY WHERE A GOTO TO THIS LABEL SHOULD
2) * JUMP TO.
2) *
2) * THE DISPLAY ARRAY:
2) *
2) * THE ARRAY VARIABLE DISPLAY IS THE MECHANISM THAT IMPLEMENTS THE SCOPING RULES
2) * OF PASCAL: THE MOST IMPORTANT COMPONENT OF EACH OF ITS ELEMENTS IS THE CTP
2) * FNAME WHICH POINTS TO THE IDENTIFIER DESCRIPTOR OF THE FIRST NAME THAT WAS
2) * DECLARED IN THAT SCOPE. THE REST OF THEM HANG FROM IT IN A BINARY SEARCH TREE.
2) * WHILE PARSING THE DECLARATION OF A RECORD TYPE, AND WHEN INSIDE A WITH STATE-
2) * MENT, THE CHAIN OF FIELDS OF THAT RECORD HANG FROM ONE OF THE ELEMENTS OF
2) * DISPLAY. THE INDEX IN DISPLAY MATCHES EXACTLY THE SCOPE LEVEL FOR ALL OTHER
1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 9,9
2) * CASES. DISPLAY[0].FNAME POINTS TO THE BINARY TREE OF PREDEFINED OBJECTS, AND
2) * SO ON. WHEN THE PARSING OF THE BODY OF A PROCEDURE IS FINISHED, THE WHOLE
2) * BINARY TREE THAT DESCRIBES IT IS THROWN AWAY. THE DESCRIPTORS OF ITS PARAMETERS
2) * ARE STILL AROUND, THOUGH, HANGING FROM THE NEXT FIELD.
2) *
2) ********************************************************************************)
2) (*LINKAGE CONVENTIONS*)
2) (********************************************************************************
2) *
2) * LINKAGE CONVENTIONS OF THE PASCAL AND PASSGO COMPILERS FOR DEC-SYSTEM10
2) * AND DEC-SYSTEM20, HAMBURG AND LOTS VERSIONS
2) * VERSION 1.0
2) *
2) * ARMANDO R. RODRIGUEZ
2) * 6-AUG-79
2) *
2) * ABSTRACT:
2) * A SEMIFORMAL DESCRIPTION OF THE MEMORY AND ACREGISTER MAPPING MECHANISM
2) * IS GIVEN, TOGETHER WITH A DESCRIPTION OF THE LINKAGE CONVENTION AND THE
2) * FRAME SETUP SEQUENCE, FOR CODE GENERATED BY THE DEC10-DEC20 PASCAL
2) * COMPILERS. COMMENTS ARE ADDED IN SOME PLACES, TO CLARIFY THINGS FOR
2) * THE READER WHO PLANS TO WRITE A ROUTINE IN ASSEMBLY LANGUAGE, AND
2) * CALL IT FROM PASCAL PROGRAMS.
2) *
2) * ACKNOWLEDGEMENTS:
2) * THANKS TO POLLE ZELLWEGER AND DAN HALBERT, WHO POINTED OUT FLAWS IN THE
2) * FIRST DRAFT, AND HELPED GETTING IDEAS STRAIGHT FOR THIS ONE.
2) *
2) * NOTATION:
2) * A) ALL THE REFERENCES TO ACREGISTERS ARE OCTAL NUMBERS. THE LETTER B
2) * AFTER THE NUMBER MEANS OCTAL.
2) * B) FOR RELATIVE ADDRESSES, ASSEMBLY LANGUAGE NOTATION IS USED:
2) * 1(17B) MEANS (CONTENTS OF RIGHT HALF OF 17B) PLUS ONE.
2) *
2) * 0. ACREGISTER MAPPING:
2) * ACREGISTER 17B POINTS TO THE TOP OF THE STACK.
2) * ACREGISTER 16B POINTS TO THE BOTTOM OF THE CURRENT STACK FRAME
2) * (THE TOP OF THE STACK FOR THE CALLER, PLUS ONE)
2) * ACREGISTER 15B POINTS TO THE 'TOP' OF THE HEAP (THE HEAP GROWS
2) * DOWN FROM THE TOP OF THE LOW SEGMENT TOWARDS THE STACK.)
2) * ACREGISTERS 7 TO 14B ARE USED AS AN UPSIDE-DOWN STACK TO KEEP
2) * WITH POINTERS (THAT IS, IT GROWS FROM 14B TOWARDS 7).
2) * INSIDE PASCAL CODE, THE EXPRESSION EVALUATION STACK GROWS FROM
2) * ACREGISTER 2 TOWARDS THE WITH STACK. (IF IT RUNS OUT OF
2) * REGISTERS, PASCAL GIVES A COMPILE TIME ERROR. IT DOES
2) * STACK HEIGHT REDUCTION, SO THIS RARELY HAPPENS).
2) * ACREGISTERS 2 TO 6 WILL PARTICIPATE IN THE PARAMETER PASSING.
2) * (THE VALUE 6 IS THE DEFAULT VALUE FOR THE SWITCH /REGISTER
1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 9,9
2) * OR COMPILER OPTION (*$XN+). SEE THE MANUAL[1] FOR DETAILS)
2) * IF THERE IS A NONEMPTY EXPRESSION EVALUATION STACK (WHEN
2) * CALLING A FUNCTION TO EVALUATE A PARAMETER, ONLY) THEN
2) * IT IS SAVED AND RESTORED BY THE CALLER.
2) * ACREGISTERS 0 AND 1 ARE NEVER USED BY PASCAL-GENERATED CODE:
2) * THEY ARE KEPT FREE, FOR THE USE OF THE RUNTIME ROUTINES. IF
2) * YOU ARE WRITTING AN ASSEMBLY-LANGUAGE ROUTINE, AND YOU DON'T
2) * CALL ANY RUNTIME LIBRARY ROUTINE, YOU ARE FREE TO USE THEM.
2) *
2) * 1. BUT, WHERE IS THE DISPLAY KEPT?
2) * THE DISPLAY IS NOT KEPT AS AN ENTITY. THE DYNAMIC LINK IS CARRIED
2) * AROUND BY THE LEFT HALF OF ACREGISTER 16B, AND DEPOSITED IN THE LAST
2) * WORD OF THE CALLER'S FRAME, IN THE LEFT HALF ALSO. THIS WORD WAS
2) * ALLOCATED BY THE CALLER FOR THAT SPECIFIC PURPOSE. SO, TO GET THE
2) * BASE OF THE FRAME FOR THE CALLER OF YOUR CALLER (TWO LEVELS), YOU
2) * USE THE LEFT HALF OF -1(16B), PUT IT IN ACREGISTER X, AND THEN USE
2) * THE LEFT HALF OF -1(X).
2) *
2) * 2. THINGS DONE BY THE CALLER ON CALL:
2) * A) SAVE ANY LIVE REGISTERS IN THE RANGE 2 TO 6, IN TEMPORARY SPACE
2) * IN ITS OWN AREA, AND FROM THE RANGE 14B DOWN TO 7, IN THE
2) * LOCATION OF THE CORRESPONDING POINTER VARIABLE.
2) * B) PASS THE PARAMETERS (SEE 3 BELOW).
2) * C) ISUE A PUSHJ 17B,<CALLEE> TO CALL.
2) *
2) * 3. PASSING PARAMETERS:
2) * A) ACREGISTERS 2 TO 6 ARE USED FOR THE FIRST PARAMETERS.
2) * B) VAR PARAMETERS:
2) * THE ADDRESS IS PASSED. THE CALLEE WILL ACCESS THEM INDIRECTLY.
2) * C) NON-VAR PARAMETERS, ONE- AND TWO-WORD LONG:
2) * THE VALUE IS PASSED IN THE ACREGISTERS. IF IT IS A TWO-WORD,
2) * AND THE FIRST WORD FALLS IN ACREGISTER 6, IT IS PUT THERE, AND
2) * THE SECOND WORD GOES TO ITS TARGET PLACE BEYOND THE STACK.
2) * D) NON-VAR PARAMETERS, LARGER THAN TWO WORDS:
2) * THE ADDRESS IS PASSED IN AN ACREGISTER.
2) * E) WHEN THE SIX ACREGISTERS HAVE BEEN USED UP:
2) * WHAT WOULD HAVE BEEN PASSED THROUGH THE ACREGISTER IS
2) * PUT DIRECTLY IN ITS PLACE IN MEMORY BEYOND THE TOP OF THE STACK.
2) *
2) * 4. MEMORY MAPPING OF THE CALLEE'S AREA:
2) * STARTING IN THE BASE ADDRESS (CONTENTS OF 16B WHEN IN YOUR AREA,
2) * CONTENTS OF 17B PLUS 1, WHEN BEYOND THE STACK):
2) * FOR PROCEDURES: 1(BASE) HAS THE FIRST PARAMETER. PARAMETERS ARE
2) * ASSIGNED MEMORY IN THE ORDER IN WHICH THEY WERE DECLARED.
2) * FOR FUNCTIONS: 1(BASE) IS WHERE THE RETURNED VALUE WILL BE PUT.
2) * 2(BASE) HAS THE FIRST PARAMETER. EVERYTHING ELSE IS THE SAME.
2) * LOCAL VARIABLES COME AFTER THE PARAMETERS, ALMOST IN THE ORDER OF
2) * DECLARATION. (A GROUP OF VARIABLES DECLARED BY AN ID-LIST
1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 9,9
2) * IS ALLOCATED IN REVERSE ORDER).
2) * ANY TEMPORARY SAVE AREAS ARE ALLOCATED AFTER THE LOCAL VARIABLES.
2) * THEY ARE USED AS A COMPILE-TIME-ASSIGNED STACK, AND THE
2) * HIGHEST LEVEL IS ALLOCATED.
2) * AN EXTRA WORD IS ALLOCATED FOR THE DYNAMIC LINK.
2) *
2) * 5. FIRST THINGS DONE BY THE CALLEE:
2) * A) REORGANIZE ACREGISTERS 16B AND 17B TO POINT TO ITS OWN FRAME.
2) * B) UPDATE THE DYNAMIC LINK BY MOVING AROUND HALFS BETWEEN 17B,
2) * 16B AND -1(16B).
2) * B) COPY THE PARAMETERS FROM THE ACREGISTERS INTO THEIR PLACES IN MEMORY.
2) * + VALUE (NON-VAR) PARAMETERS WHICH ARE LONGER THAN TWO
2) * WORDS: TAKE THE ADDRESS FROM THE ACREGISTER, OR FROM THE
2) * FIRST WORD IN ITS MEMORY LOCATION (IF IT IS AN OVERFLOW
2) * PARAMETER), AND DO A BLT (BLOCK TRANSFER).
2) * + VAR PARAMETERS, AND NON-VAR WHICH ARE ONE OR TWO WORDS:
2) * IF THEY ARE IN ACREGISTERS, COPY THEM INTO THEIR PLACE IN
2) * MEMORY. IF NOT, DO NOTHING.
2) *
2) * 6. REGISTERS THAT THE CALLEE CAN USE:
2) * ALL OF REGISTERS 2 TO 14B. ANY OF THEM THAT WERE ALIVE WERE SAVED BY THE
2) * CALLER. IF YOU DON'T CALL ANY OF THE RUNTIME LIBRARY ROUTINES, YOU CAN
2) * USE REGISTERS 0 AND 1 ALSO.
2) *
2) * 7. LAST THINGS DONE BY THE CALLEE:
2) * A) PUT BACK IN PLACE THE LEFT HALFS OF ACREGISTERS 17 (PUSHJ COUNT)
2) * AND 16B (DYNAMIC LINK).
2) * B) ISUE A POPJ 17B TO GO BACK.
2) * C) NOTHING ELSE. EVEN IF IT IS A FUNCTION, THE RESULT WAS PUT IN ITS
2) * PLACE IF AND WHEN AN ASSIGNMENT WAS MADE TO THE FUNCTION
2) * IDENTIFIER. (ITS PLACE IS 1(16B), OR 1(17B) IF YOU DID NOT
2) * BUILD YOUR OWN FRAME).
2) *
2) * 8. THINGS DONE BY THE CALLER ON RETURN:
2) * A) RECONSTRUCT ITS OWN FRAME.
2) * B) IF IT SAVED ACREGISTERS IN MEMORY, BRING THEM BACK TO PLACE.
2) * B) IF THE CALLEE WAS A FUNCTION, PICK UP THE RESULT FROM 2(17),
2) * AND PUT IT IN AN ACREGISTER (THE CURRENT TOP OF THE EXPRESSION
2) * EVALUATION STACK).
2) *
2) * BIBLIOGRAPHY:
2) *
2) * [1] RODRIGUEZ, ARMANDO: PASCAL AND PASSGO AT LOTS, ADAPTED FROM
2) * PASCAL FOR THE DECSYSTEM-20, BY E. KISICKI AND H.H.NAGEL.
2) * AVAILABLE ON-LINE AT LOTS AND SCORE IN DOC:PASCAL.MAN
2) * ACCESSIBLE AT SU-AI BY .READ PASMAN
2) *
2) *
1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 9,9
2) ********************************************************************************)
2) (*PACKING POLICY*)
2) (********************************************************************************
2) *
2) * PACKING POLICY OF THE PASCAL AND PASSGO COMPILERS FOR DECSYSTEM-10
2) * AND DECSYSTEM-20, LOTS AND HAMBURG VERSIONS.
2) *
2) * ARMANDO R. RODRIGUEZ.
2) * 10-JUL-79
2) *
2) * INTRODUCTION:
2) *
2) * THE STANDARD ONLY SAYS THAT THE USE OF THE RESERVED WORD PACKED IN A TYPE DEFI-
2) * NITION IS AN INDICATION TO THE COMPILER THAT IT SHOULD USE A PACKING MECHANISM,
2) * BUT IT DOES NOT DEFINE THE MECHANISM, AN IT IMPLIES THAT ONE WAY OF DOING IT IS
2) * BY DOING NOTHING. PASCAL/PASSGO DO HAVE A MECHANISM, THAT TRIES TO PROVIDE BOTH
2) * A REASONABLE PACKED SPACE AND THE LEAST POSSIBLE LOSS IN ADDRESSING EFFICIENCY,
2) * BY PREVENTING POTENTIALLY LARGE (ONE-WORD LONG OR MORE) OBJECTS FROM GETTING
2) * ALIGNED TO A BIT ADDRESS, AND BY TAKING ADVANTAGE OF THE HALF-WORD ADDRESSING
2) * MECHANISM OF THE DEC-10 HARDWARE.
2) *
2) * POLICY:
2) *
2) * THE ORDER OF DEFINITION OF THIS RULES IS INTENDED FOR CLARITY ONLY. IT DOES
2) * NOT IMPLY ANY PRECEDENCE RULE. THE RULES SHOULD BE MUTUALLY EXCLUSIVE. IF
2) * THERE IS ANY AMBIGUITY, IT IS A BUG IN THIS DOCUMENT: PLEASE TELL ARR.
2) *
2) * 1. EVERY NEW VARIABLE IS ALIGNED AT A NEW WORD BOUNDARY.
2) *
2) * 2. EVERY ARRAY OR RECORD, EVEN IF IT IS AN ELEMENT OF A PACKED ARRAY OR A FIELD
2) * OF A PACKED RECORD, IS ALIGNED AT A NEW WORD BOUNDARY AND HAS A SIZE
2) * GIVEN IN FULL WORDS, REGERDLESS OF WHETHER IT ITSELF IS PACKED.
2) *
2) * 4. PACKED FILES OF ASCII OR OF A SUBRANGE OF ASCII (E.G., CHAR) ARE ACTUALLY
2) * ACCESSED AT BYTE BOUNDARIES. PACKED HAS NO EFFECT ON FILES OF ANY OTHER
2) * TYPE, THAT IS, GETS AND PUTS WILL MOVE AROUND FULL WORDS.
2) *
2) * 5. IN FIELDS OF RECORDS AND ELEMENTS OF ARRAYS, EXCEPT FOR THE PREVIOUS RULES:
2) * A. POINTERS ARE KEPT IN HALF A WORD.
2) * C. WHEN THE SIZE OF AN OBJECT IS LARGER THAN WHAT IS LEFT OF THIS WORD,
2) * THE OBJECT IS ALIGNED TO THE NEXT WORD.
2) * D. WHEN THE TYPE OF AN OBJECT IS A SUBRANGE OF INTEGER, BUT ITS LOWER BOUND
2) * IS NEGATIVE, ITS SIZE IS A FULL WORD, AND IT IS ALLIGNED TO THE NEXT
2) * WORD BOUNDARY.
2) * E. ALL OTHER CASES ARE PACKED TO THE EXACT NUMBER OF BITS THAT THEY NEED,
2) * AND ALLIGNED IN THE NEXT AVAILABLE BIT. (BOOLEAN USES 1 BIT, ASCII AND
2) * ITS SUBRANGES, 1 BYTE, THAT IS, 7 BITS).
2) *
1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 9,9
2) *
2) * THINGS THAT YOU CAN DO:
2) *
2) * THERE ARE THINGS THAT THE COMPILER WILL NOT DO, THAT YOU CAN DO FAIRLY EASILY,
2) * BY USING THE APPROPRIATE DUMMY FIELDS TO FORCE AN ALIGNMENT THAT WOULD GIVE
2) * YOU BETTER ADDRESSING AT RUNTIME:
2) *
2) * A. WHEN THE SIZE OF AN OBJECT IS EXACTLY HALF A WORD (18 BITS), THE COMPILER
2) * WILL NOT DO ANYTHING SPECIAL, BUT IF IT ALSO HAPPENS TO BE ALIGNED AT
2) * A HALF-WORD BOUNDARY, HALF-WORD ADDRESSING AND MOVING WILL BE USED.
2) *
2) * B. WHEN YOU NEED THE ELEMENTS OF ONE RECORD TO MAP ALL INTO ONE ONLY WORD,
2) * YOU HAVE TO DO TWO THINGS: (A) (OBVIOUSLY) MAKE SURE THAT THE TOTAL
2) * SUM OF THE BIT SPACE NEEDED IS 36 OR LESS, AND (B) MAKE SURE THAT NONE
2) * OF THE TYPES OF THE FIELDS IS AN ARRAY OR RECORD: EVEN IF IT IS PACKED,
2) * IT WILL ALOCATE A FULL WORD FOR ITSELF, AND ALIGN AT A NEW WORD BOUN-
2) * DARY.
2) ********************************************************************************)
2) (* GLOBAL DECLARATIONS. *)
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 9 line 21
1) %1 HEADER = 'PASCAL/LOTS FROM 1-JUL-79'; (* 14.*) \
1) %2 HEADER = 'PASSGO/LOTS FROM 1-JUL-79'; (* 15.*) \
1) %3 header = 'PASCAL/SAIL 1.0 1-JUL-79'; \
1) %4 HEADER = 'PASSGO/SAIL 1.0 1-JUL-79'; \
1) headlen = 11; (*PART OF THE HEADER THAT WIL SHOW UP IN TTY*)
**** File 2) PASCAL.PAS[PAS,SYS], Page 12 line 21
2) %1 HEADER = 'PASCAL/LOTS 1.1 6-SEP-79'; (* 14.*) \
2) %2 HEADER = 'PASSGO/LOTS 1.1 6-SEP-79'; (* 15.*) \
2) %3 header = 'PASCAL/SAIL 1.1 6-SEP-79'; \
2) %4 HEADER = 'PASSGO/SAIL 1.1 6-SEP-79'; \
2) headlen = 11; (*PART OF THE HEADER THAT WIL SHOW UP IN TTY*)
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 9 line 53
1) maxpcrossoption = 20; (* 4. NR. OF OPTION SWITCHES OF PCROSS *)
1) reg0 = 0; (* WORKREGISTER *)
**** File 2) PASCAL.PAS[PAS,SYS], Page 12 line 53
2) maxpcrefoption = 18; (* 4. NR. OF OPTION SWITCHES OF PCREF *)
2) reg0 = 0; (* WORKREGISTER *)
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 10 line 95
1) structure = PACKED RECORD
1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 10,13
**** File 2) PASCAL.PAS[PAS,SYS], Page 13 line 96
2) (*SEE THE DOCUMENTATION AT FRONT FOR A DETAILED DESCRIPTION OF THE FIELDS
2) IN THIS RECORD*)
2) structure = PACKED RECORD
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 10 line 159
1) identifier = PACKED RECORD
**** File 2) PASCAL.PAS[PAS,SYS], Page 13 line 163
2) (*SEE THE DOCUMENTATION AT FRONT FOR A DETAILED DESCRIPTION OF THE FIELDS
2) IN THIS RECORD*)
2) identifier = PACKED RECORD
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 11 line 65
1) cross_reference, (*IF TRUE, PCROSS SHOULD BE CALLED AT THE END*)
1) counting, (*TRUE IF STATEMENT COUNTS (PROFILE) ARE REQUIRED*)
**** File 2) PASCAL.PAS[PAS,SYS], Page 14 line 65
2) cross_reference, (*IF TRUE, PCREF SHOULD BE CALLED AT THE END*)
2) counting, (*TRUE IF STATEMENT COUNTS (PROFILE) ARE REQUIRED*)
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 11 line 137
1) error_flag: boolean; (*TRUE IF SYNTACTIC ERRORS DETECTED IN ONE PROGRAM*)
1) no_code_gen: boolean; (*IF TRUE, WRITE_MACHINE_CODE WILL NOT EXECUTE*)
1) (*SET BY ANY ERRORS OR BY /NOLOAD IN PASSGO*)
1) error_in_heading: boolean;
1) error_in_first: boolean; (* 30. TRUE IF THE EXTRA ADVICE MESSAGE IS NEEDED*)
1) errinx: 0..maxerr ; (*NR OF ERRORS IN CURRENT SOURCE LINE*)
1) errorcount: integer; (*TOTAL NR OF ERRORS DETECTED IN PROGRAM*)
1) error_exit: boolean; (*TO ENABLE EXIT DURING COMPILATION*)
1) overrun: boolean;
**** File 2) PASCAL.PAS[PAS,SYS], Page 14 line 137
2) errorflag: boolean; (*TRUE IF SYNTACTIC ERRORS DETECTED IN ONE PROGRAM*)
2) no_code_gen: boolean; (*IF TRUE, WRITE_MACHINE_CODE WILL NOT EXECUTE*)
2) (*SET BY ANY ERRORS OR BY /NOLOAD IN PASSGO*)
2) needsaneoln: boolean;
2) errorinfirst: boolean; (* 30. TRUE IF THE EXTRA ADVICE MESSAGE IS NEEDED*)
2) errinx: 0..maxerr ; (*NR OF ERRORS IN CURRENT SOURCE LINE*)
2) errorcount: integer; (*TOTAL NR OF ERRORS DETECTED IN PROGRAM*)
2) errorexit: boolean; (*TO ENABLE EXIT DURING COMPILATION*)
2) overrun: boolean;
***************
1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 11,14
**** File 1) PASCAL.BKP[PAS,SYS], Page 11 line 164
1) errorinline,
1) followerror : boolean;
1) errline,
1) buffer: ARRAY [1..stdchcntmax] OF char;
1) firstpage, (* 6. PAGE AT WHICH THE PROGRAM STARTS. *)
**** File 2) PASCAL.PAS[PAS,SYS], Page 14 line 164
2) errorinlast,
2) errorinline,
2) followerror : boolean;
2) lastchcnt: 0..stdchcntmax;
2) lastbuffer,
2) errline,
2) buffer: ARRAY [1..stdchcntmax] OF char;
2) line500, (* TO GIVE LINE NUMBER IN THE TTY EVERY 500 LINES OF A PAGE*)
2) firstpage, (* 6. PAGE AT WHICH THE PROGRAM STARTS. *)
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 11 line 213
1) lettersordigits,letters,digits,lettersdigitsorleftarrow,hexadigits: SET OF char;
1) constbegsys,simptypebegsys,typebegsys,blockbegsys,selectsys,facbegsys,
**** File 2) PASCAL.PAS[PAS,SYS], Page 14 line 217
2) lettersordigits,letters,digits,identchars,hexadigits: SET OF char;
2) constbegsys,simptypebegsys,typebegsys,blockbegsys,selectsys,facbegsys,
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 11 line 308
1) goodversion, (*VERSION NUMBER TO BE CONDITIONALLY COMPILED*) (* 8.*)
**** File 2) PASCAL.PAS[PAS,SYS], Page 14 line 312
2) nameversion: PACKED ARRAY[1..5] OF char; (*VERSION NAME FOR CONDITIONALLY COMPILED*)
2) goodversion, (*VERSION NUMBER TO BE CONDITIONALLY COMPILED*) (* 8.*)
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 11 line 321
1) (* 4. ALLOW FOR FLEXIBLE NAME OF PCROSS FILE; KEEP TABLE OF PCROSS SWITCHES.*)
1) %13 pcross_file, (* 14.*) \
1) pcross_tmpfile: PACKED ARRAY [1..9] OF char;
1) %13 pcross_device, (* 14.*) \
1) source_device: PACKED ARRAY[1..6] OF char;
1) %24 PCROSS_FILE,
1) PCROSS_DEVICE: ALFA; (* 14.*) \
1) pcross_ppn, pcross_core: integer;
1) pcross_option_name: PACKED ARRAY [1..maxpcrossoption] OF alfa;
1) (* 1. ALLOW FOR FLEXIBLE NAME OF LINKER-LOADER.*)
**** File 2) PASCAL.PAS[PAS,SYS], Page 14 line 326
1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 11,14
2) (* 4. ALLOW FOR FLEXIBLE NAME OF PCREF FILE; KEEP TABLE OF PCREF SWITCHES.*)
2) %13 pcreffile, (* 14.*) \
2) pcreftmpfile: PACKED ARRAY [1..9] OF char;
2) %13 pcrefdevice, (* 14.*) \
2) source_device: PACKED ARRAY[1..6] OF char;
2) %24 PCREFFILE,
2) PCREFDEVICE: ALFA; (* 14.*) \
2) pcrefppn, pcrefcore: integer;
2) pcrefoption_name: PACKED ARRAY [1..maxpcrefoption] OF alfa;
2) (* 1. ALLOW FOR FLEXIBLE NAME OF LINKER-LOADER.*)
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 12 line 70
1) (* INSERT (???) DEVICE, PROJNR, PROGNR AND CORE FOR PASLIB AND PCROSS *)
1) library[pascalsy].chained := false;
**** File 2) PASCAL.PAS[PAS,SYS], Page 15 line 70
2) (* INSERT (???) DEVICE, PROJNR, PROGNR AND CORE FOR PASLIB AND PCREF *)
2) library[pascalsy].chained := false;
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 12 line 86
1) pcross_file := 'PCROSS ';
1) pcross_tmpfile := 'PCR TMP';
1) pcross_device := 'SYS '; (* 0.*)
1) pcross_ppn := 0;
1) pcross_core := 100;
1) (* 1. FLEXIBLE NAME FOR THE LINKER.*)
**** File 2) PASCAL.PAS[PAS,SYS], Page 15 line 86
2) pcreffile := 'PCREF ';
2) pcreftmpfile := 'PCR TMP';
2) pcrefdevice := 'SYS '; (* 0.*)
2) pcrefppn := 0;
2) pcrefcore := 100;
2) (* 1. FLEXIBLE NAME FOR THE LINKER.*)
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 12 line 104
1) PCROSS_FILE := 'PCROSS ';
1) PCROSS_TMPFILE := 'PCR TMP';
1) PCROSS_DEVICE := 'SYS ';
1) PCROSS_PPN := 0;
1) PCROSS_CORE := 100;
1) END (*SEARCH LIBRARIES*);
**** File 2) PASCAL.PAS[PAS,SYS], Page 15 line 104
2) PCREFFILE := 'PCREF ';
1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 12,15
2) PCREFTMPFILE := 'PCR TMP';
2) PCREFDEVICE := 'SYS ';
2) PCREFPPN := 0;
2) PCREFCORE := 100;
2) END (*SEARCH LIBRARIES*);
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 12 line 200
1) extna[declfunc,22] := 'GETCHA '; extlanguage[declfunc,22] := pascalsy; (* 25.*)
1) extna[declfunc,23] := 'POS '; extlanguage[declfunc,23] := pascalsy; (* 25.*)
**** File 2) PASCAL.PAS[PAS,SYS], Page 15 line 200
2) extna[declfunc,22] := 'GETCHR '; extlanguage[declfunc,22] := pascalsy; (* 25.*)
2) extna[declfunc,23] := 'POS '; extlanguage[declfunc,23] := pascalsy; (* 25.*)
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 12 line 334
1) forward_pointer_type := NIL; lastbtp := NIL; fglobptr := NIL ; fileptr := NIL ;
**** File 2) PASCAL.PAS[PAS,SYS], Page 15 line 333
2) nameversion := ' ';
2) forward_pointer_type := NIL; lastbtp := NIL; fglobptr := NIL ; fileptr := NIL ;
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 12 line 342
1) dp := true; search_error := true; error_flag := false ; %13 external := false; \
1) no_code_gen := false; hassoslines := true; logfile := false;
1) %13 entry_done := false; \ debug := false; debug_switch := false; lptfile := false;
1) error_exit := false; ttyread := false; %13 load_and_go := false; loadit := false; \
1) cross_reference := false; %13 fortran_enviroment := false; \ overrun := false;
**** File 2) PASCAL.PAS[PAS,SYS], Page 15 line 343
2) dp := true; search_error := true; errorflag := false ; %13 external := false; \
2) no_code_gen := false; hassoslines := true; logfile := false;
2) %13 entry_done := false; \ debug := false; debug_switch := false; lptfile := false;
2) errorexit := false; ttyread := false; %13 load_and_go := false; loadit := false; \
2) cross_reference := false; %13 fortran_enviroment := false; \ overrun := false;
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 12 line 354
1) tchcnt := 0;
1) aos := b0; %13 library_index := 0; (* 17.*) \ errinx := 0;
**** File 2) PASCAL.PAS[PAS,SYS], Page 15 line 355
2) tchcnt := 0; line500 := 1;
2) aos := b0; %13 library_index := 0; (* 17.*) \ errinx := 0;
***************
1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 12,15
**** File 1) PASCAL.BKP[PAS,SYS], Page 12 line 374
1) lettersdigitsorleftarrow := ['0'..'9','A'..'Z','_'];
1) languagesys := [fortransy,pascalsy];
**** File 2) PASCAL.PAS[PAS,SYS], Page 15 line 375
2) identchars := ['0'..'9','A'..'Z','_'];
2) languagesys := [fortransy,pascalsy];
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 12 line 675
1) INITPROCEDURE (*PCROSS OPTION NAMES*) ;
1) (* 4. TO BE ABLE TO PASS THEM TO PCROSS *)
1) BEGIN
1) pcross_option_name [1] := 'NEW ';
1) pcross_option_name [2] := 'NONEW ';
1) pcross_option_name [3] := 'CROSS ';
1) pcross_option_name [4] := 'NOCROSS ';
1) pcross_option_name [5] := 'WIDTH ';
1) pcross_option_name [6] := 'INDENT ';
1) pcross_option_name [7] := 'INCREMENT ';
1) pcross_option_name [8] := 'DOTS ';
1) pcross_option_name [9] := 'NODOTS ';
1) pcross_option_name [10] := 'BEGIN ';
1) pcross_option_name [11] := 'FORCE ';
1) pcross_option_name [12] := 'NOFORCE ';
1) pcross_option_name [13] := 'CLEAN ';
1) pcross_option_name [14] := 'NOCLEAN ';
1) pcross_option_name [15] := 'RES ';
1) pcross_option_name [16] := 'NONRES ';
1) pcross_option_name [17] := 'COMM ';
1) pcross_option_name [18] := 'STR ';
1) pcross_option_name [19] := 'CASE ';
1) pcross_option_name [20] := 'VERSION ';
1) END (*PCROSS OPTION NAMES*) ;
1) (*----------------------------------------------------------------------------*)
**** File 2) PASCAL.PAS[PAS,SYS], Page 15 line 676
2) INITPROCEDURE (*PCREF OPTION NAMES*) ;
2) (* 4. TO BE ABLE TO PASS THEM TO PCREF *)
2) BEGIN
2) pcrefoption_name [ 1] := 'CROSS ';
2) pcrefoption_name [ 2] := 'VERSION ';
2) pcrefoption_name [ 3] := 'WIDTH ';
2) pcrefoption_name [ 4] := 'INDENT ';
2) pcrefoption_name [ 5] := 'INCREMENT ';
2) pcrefoption_name [ 6] := 'DOTS ';
2) pcrefoption_name [ 7] := 'NODOTS ';
2) pcrefoption_name [ 8] := 'HEAD ';
1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 12,15
2) pcrefoption_name [ 9] := 'NOHEAD ';
2) pcrefoption_name [10] := 'LINES ';
2) pcrefoption_name [11] := 'BEGIN ';
2) pcrefoption_name [12] := 'FORCE ';
2) pcrefoption_name [13] := 'NOFORCE ';
2) pcrefoption_name [14] := 'RES ';
2) pcrefoption_name [15] := 'NONRES ';
2) pcrefoption_name [16] := 'COMM ';
2) pcrefoption_name [17] := 'STR ';
2) pcrefoption_name [18] := 'CASE ';
2) END (*PCREF OPTION NAMES*) ;
2) (*----------------------------------------------------------------------------*)
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 13 line 10
1) forward_pointer_type := NIL; (* 13. LASTBTP REPEATED BELOW.*)
**** File 2) PASCAL.PAS[PAS,SYS], Page 16 line 9
2) currname := ' '; (* 27.*)
2) forward_pointer_type := NIL; (* 13. LASTBTP REPEATED BELOW.*)
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 13 line 21
1) error_flag := false; overrun := false;
1) error_exit := false; ttyread := false;
1) %13 entry_done := false; \ first_symbol := true;
**** File 2) PASCAL.PAS[PAS,SYS], Page 16 line 22
2) errorflag := false; overrun := false;
2) errorexit := false; ttyread := false;
2) %13 entry_done := false; \ first_symbol := true;
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 13 line 27
1) sstringstart := false; (* 25.*) error_in_first := false; (* 30.*)
1) counting := false; (* 28.*)
1) genprocfile := false;
1) %13 ic := high_start; lc := low_start; (* 14.*) \
1) %13 library_index := 0; (* 17.*) \ errinx := 0;
**** File 2) PASCAL.PAS[PAS,SYS], Page 16 line 28
2) sstringstart := false; (* 25.*) errorinfirst := false; (* 30.*)
2) counting := false; (* 28.*) errorinlast := true; (* 30.*)
2) genprocfile := false;
2) %13 ic := high_start; lc := low_start; (* 14.*) \
2) %13 library_index := 0; (* 17.*) \ errinx := 0;
***************
1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 13,16
**** File 1) PASCAL.BKP[PAS,SYS], Page 13 line 37
1) symcnt := 0; (* 30.*)
1) currname := ' '; (* 27.*)
1) FOR i := 1 TO 18 DO arraybps[i].state := unused;
1) arraybps[7].state := requested;
1) FOR i := 1 TO stdchcntmax DO errline[i] := ' ';
1) %13 (* 19.*)
**** File 2) PASCAL.PAS[PAS,SYS], Page 16 line 38
2) symcnt := 0; (* 30.*) lastchcnt := 0;
2) FOR i := 1 TO 18 DO
2) arraybps[i].state := unused;
2) arraybps[7].state := requested;
2) FOR i := 1 TO stdchcntmax DO
2) BEGIN
2) errline[i] := ' ';
2) lastbuffer[i] := ' ';
2) END;
2) %13 (* 19.*)
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 13 line 110
1) error_flag := true ;
1) IF errinx >= maxerr THEN
**** File 2) PASCAL.PAS[PAS,SYS], Page 16 line 115
2) errorflag := true ;
2) IF errinx >= maxerr THEN
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 13 line 125
1) error_in_first := true;
1) IF (ferrnr <> 214) AND (ferrnr <> 356) AND (ferrnr <> 405) AND
**** File 2) PASCAL.PAS[PAS,SYS], Page 16 line 130
2) errorinfirst := true;
2) IF (ferrnr <> 214) AND (ferrnr <> 356) AND (ferrnr <> 405) AND
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 15 line 44
1) %13 (* 14.*) (* 11. DEFAULT THE OBJECT FILE NAME IF NEEDED.*)
**** File 2) PASCAL.PAS[PAS,SYS], Page 18 line 44
2) %3
2) IF object_protection = 0 THEN
2) object_protection := 400B;
2) (*NO DUMP OF .REL FILES. EJG 20-JAN-79*)
2) \
1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 15,18
2) %13 (* 14.*) (* 11. DEFAULT THE OBJECT FILE NAME IF NEEDED.*)
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 15 line 163
1) % 3
1) LOAD_AND_GO := (NOT EXTERNAL) AND (NOT OPTION ('NOLINK '))
1) AND (OPTION('LINK ') OR OPTION('LOADER '));
1) IF OPTION('LOADER ') THEN
1) BEGIN
1) LINKER_FILE := 'LOADER ';
1) LINK_TMPFILE := 'LOA TMP';
1) END
1) ELSE
1) BEGIN
1) LINKER_FILE := 'LINK ';
1) LINK_TMPFILE := 'LNK TMP'
1) END;
1) \
1) %13
1) reset(tempcore,link_tmpfile); (* CHECK FOR THE DEBUG SWITCH IN THE TEMPFILE FOR THE LINKER *)
1) IF NOT eof(tempcore) THEN
1) BEGIN
1) new(command_buffer:buffer_size);
1) command_buffer↑[0] := ' '; i := 1;
1) WHILE NOT eof(tempcore) AND (i < buffer_size) DO
1) BEGIN
1) IF eoln(tempcore) THEN
1) BEGIN
1) readln(tempcore);
1) command_buffer↑[i] := cr;
1) command_buffer↑[i+1] := lf; i := i + 2
1) END
1) ELSE (* NOT EOLN(TEMPCORE) *)
1) BEGIN
1) read(tempcore,ch);
1) command_buffer↑[i] := ch;
1) IF (command_buffer↑[i-1] = '/') AND (ch = 'D') THEN
1) BEGIN
1) debug := true; debug_switch := true;
1) (* 13. GET RID OF THE REST OF THE STANDARD SWITCH, /DEBUG:PASCAL*)
1) WHILE ch IN ['A'..'Z',':'] DO
1) read (tempcore, ch);
1) command_buffer↑[i-1] := ch;
1) END
1) ELSE i := i + 1
1) END
1) END;
1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 15,18
1) rewrite(tempcore,link_tmpfile);
1) write(tempcore,command_buffer↑:i);
1) dispose(command_buffer:buffer_size)
1) END
1) ELSE (* EOF(TEMPCORE) *)
1) BEGIN
1) IF loadit THEN
1) BEGIN
1) rewrite(tempcore,link_tmpfile); (* 1. FLEXIBLE NAME OF LINKER.*)
1) write(tempcore,'DSK:',object_file:6);
1) IF load_and_go THEN
1) write(tempcore,' /E');
1) write(tempcore,'/G'); (* 1. MORE CORRECT ORDERING.*)
1) END
1) END;
1) (* 14.*) \
1) %24 (* 14. PASSGO VERSION OF THE LOAD_AND_GO CHECKING.*)
**** File 2) PASCAL.PAS[PAS,SYS], Page 18 line 169
2) %1
2) RESET(TEMPCORE,LINK_TMPFILE); (* CHECK FOR THE DEBUG SWITCH IN THE TEMPFILE FOR THE LINKER *)
2) IF NOT EOF(TEMPCORE) THEN
2) BEGIN
2) NEW(COMMAND_BUFFER:BUFFER_SIZE);
2) COMMAND_BUFFER↑[0] := ' '; I := 1;
2) WHILE NOT EOF(TEMPCORE) AND (I < BUFFER_SIZE) DO
2) BEGIN
2) IF EOLN(TEMPCORE) THEN
2) BEGIN
2) READLN(TEMPCORE);
2) COMMAND_BUFFER↑[I] := CR;
2) COMMAND_BUFFER↑[I+1] := LF; I := I + 2
2) END
2) ELSE (* NOT EOLN(TEMPCORE) *)
2) BEGIN
2) READ(TEMPCORE,CH);
2) COMMAND_BUFFER↑[I] := CH;
2) IF (COMMAND_BUFFER↑[I-1] = '/') AND (CH = 'D') THEN
2) BEGIN
2) DEBUG := TRUE; DEBUG_SWITCH := TRUE;
2) (* 13. GET RID OF THE REST OF THE STANDARD SWITCH, /DEBUG:PASCAL*)
2) WHILE CH IN ['A'..'Z',':'] DO
2) READ (TEMPCORE, CH);
2) COMMAND_BUFFER↑[I-1] := CH;
2) END
2) ELSE I := I + 1
2) END
2) END;
2) REWRITE(TEMPCORE,LINK_TMPFILE);
1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 15,18
2) WRITE(TEMPCORE,COMMAND_BUFFER↑:I);
2) DISPOSE(COMMAND_BUFFER:BUFFER_SIZE)
2) END
2) ELSE (* EOF(TEMPCORE) *)
2) BEGIN
2) IF LOADIT THEN
2) BEGIN
2) REWRITE(TEMPCORE,LINK_TMPFILE); (* 1. FLEXIBLE NAME OF LINKER.*)
2) WRITE(TEMPCORE,'DSK:',OBJECT_FILE:6);
2) IF LOAD_AND_GO THEN
2) WRITE(TEMPCORE,' /E');
2) WRITE(TEMPCORE,'/G'); (* 1. MORE CORRECT ORDERING.*)
2) END
2) END;
2) (* 14.*) \
2) %24 (* 14. PASSGO VERSION OF THE LOAD_AND_GO CHECKING.*)
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 16 line 39
1) IF linenr = '-----' THEN
1) hassoslines := false;
1) EXIT IF (linenr <> ' ') OR eof(source);
1) linecnt := 1;
1) IF debug AND (lastline > -1) THEN newpager;
**** File 2) PASCAL.PAS[PAS,SYS], Page 19 line 39
2) hassoslines := linenr <> '-----';
2) EXIT IF (linenr <> ' ') OR eof(source);
2) linecnt := 1;
2) line500 := 1;
2) IF debug AND (lastline > -1) THEN newpager;
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 16 line 52
1) write (tty, pagecnt:3, '..');
1) break (tty);
1) error_in_heading := true;
1) readln(source) (*TO OVERREAD SECOND <LF> IN PAGE MARK*)
**** File 2) PASCAL.PAS[PAS,SYS], Page 19 line 52
2) BEGIN
2) write (tty, pagecnt:3, '..');
2) break (tty);
2) needsaneoln := true;
2) END;
2) readln(source) (*TO OVERREAD SECOND <LF> IN PAGE MARK*)
***************
1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 16,19
**** File 1) PASCAL.BKP[PAS,SYS], Page 16 line 83
1) IF error_in_heading THEN
1) BEGIN
1) writeln(tty);
1) error_in_heading := false;
1) END;
**** File 2) PASCAL.PAS[PAS,SYS], Page 19 line 85
2) IF needsaneoln THEN
2) BEGIN
2) writeln(tty);
2) needsaneoln := false;
2) END;
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 16 line 98
1) IF hassoslines THEN
**** File 2) PASCAL.PAS[PAS,SYS], Page 19 line 100
2) IF errorinfirst AND NOT errorinlast THEN
2) writeln(list,'-------- ',lastbuffer:lastchcnt);
2) IF hassoslines THEN
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 16 line 106
1) IF NOT hassoslines THEN (* 27.*)
**** File 2) PASCAL.PAS[PAS,SYS], Page 19 line 110
2) IF errorinfirst AND NOT errorinlast THEN
2) writeln(tty,'-------- ',lastbuffer:lastchcnt);
2) IF NOT hassoslines THEN (* 27.*)
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 16 line 188
1) END;
1) IF error_in_first THEN (* 30.*)
1) BEGIN
1) error_in_first := false;
1) IF llptfile THEN
**** File 2) PASCAL.PAS[PAS,SYS], Page 19 line 194
2) END (*CASE*);
2) IF errorinfirst THEN (* 30.*)
2) BEGIN
2) errorinfirst := false;
2) IF llptfile THEN
***************
1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 16,19
**** File 1) PASCAL.BKP[PAS,SYS], Page 16 line 199
1) break(tty); errinx := 0; errorinline := false;
**** File 2) PASCAL.PAS[PAS,SYS], Page 19 line 205
2) errorinlast := true;
2) break(tty); errinx := 0; errorinline := false;
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 16 line 202
1) END;
1) readln(source);
1) linecnt := linecnt + 1; chcnt := 0; symcnt :=0;
1) IF programname <> ' ' THEN (* 27.*)
1) IF linecnt MOD 500 = 0 THEN
1) BEGIN
**** File 2) PASCAL.PAS[PAS,SYS], Page 19 line 209
2) END (*IF ERRORINLINE*)
2) ELSE (*NOT ERRORINLINE*)
2) IF symcnt > 0 THEN
2) BEGIN
2) errorinlast := false;
2) lastbuffer := buffer;
2) lastchcnt := chcnt;
2) END (*NOT ERRORINLINE*);
2) readln(source);
2) linecnt := linecnt + 1; chcnt := 0; symcnt :=0;
2) line500 := line500 + 1;
2) IF programname <> ' ' THEN (* 27.*)
2) IF line500 = 500 THEN
2) BEGIN
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 16 line 210
1) error_in_heading := true;
1) END;
1) IF error_exit THEN
1) IF first_symbol THEN GOTO 0
**** File 2) PASCAL.PAS[PAS,SYS], Page 19 line 225
2) needsaneoln := true;
2) line500 := 0;
2) END;
2) IF errorexit THEN
2) IF first_symbol THEN GOTO 0
***************
1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 16,19
**** File 1) PASCAL.BKP[PAS,SYS], Page 16 line 218
1) IF NOT eof(source) THEN getnextline
1) ELSE
**** File 2) PASCAL.PAS[PAS,SYS], Page 19 line 234
2) IF NOT eof(source) THEN
2) getnextline
2) ELSE
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 16 line 222
1) error_exit := true;
1) finishline
**** File 2) PASCAL.PAS[PAS,SYS], Page 19 line 239
2) errorexit := true;
2) finishline
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 16 line 256
1) error_flag := false;
1) END (* WARNING *);
**** File 2) PASCAL.PAS[PAS,SYS], Page 19 line 273
2) errorflag := false;
2) END (* WARNING *);
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 17 line 9
1) 111,
1) 222;
1) CONST
**** File 2) PASCAL.PAS[PAS,SYS], Page 20 line 9
2) 111,222,333;
2) CONST
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 17 line 50
1) VAR
**** File 2) PASCAL.PAS[PAS,SYS], Page 20 line 49
2) (*PROCESSES THE OPTIONS INSIDE A COMMENT THAT STARTS WITH
2) A DOLLAR SIGN.*)
2) (*LETTERS LEFT: ABHJKMNQWZ*)
2) VAR
***************
1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 17,20
**** File 1) PASCAL.BKP[PAS,SYS], Page 17 line 58
1) IF NOT (ch IN ['\','*']) THEN nextch;
1) IF ch IN (['+','-'] + digits) THEN
**** File 2) PASCAL.PAS[PAS,SYS], Page 20 line 61
2) IF ch <> endchar THEN nextch;
2) IF ch IN (['+','-'] + digits) THEN
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 17 line 144
1) END
1) END
1) ELSE error(203);
**** File 2) PASCAL.PAS[PAS,SYS], Page 20 line 147
2) END (*CASE LCH OF*)
2) END (*IF CH IN [+,-]+DIGITS*)
2) ELSE error(203);
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 17 line 153
1) IF ch = '$' THEN options;
1) (* 3. TREAT '%'-'\' COMMENTS DIFFERENTLY.*)
**** File 2) PASCAL.PAS[PAS,SYS], Page 20 line 156
2) (* 3. TREAT '%'-'\' COMMENTS DIFFERENTLY.*)
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 17 line 165
1) WHILE ch <> endchar DO
**** File 2) PASCAL.PAS[PAS,SYS], Page 20 line 167
2) BEGIN
2) IF ch = '$' THEN options;
2) WHILE ch <> endchar DO
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 17 line 170
1) END
1) END (*IF ONECHAR*)
1) ELSE
1) LOOP
**** File 2) PASCAL.PAS[PAS,SYS], Page 20 line 174
2) END;
2) nextch;
2) END;
2) END (*IF ONECHAR*)
2) ELSE
1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 17,20
2) BEGIN
2) IF ch = '$' THEN options;
2) LOOP
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 17 line 183
1) nextch
1) END (*SKIPCOMMENT*);
**** File 2) PASCAL.PAS[PAS,SYS], Page 20 line 191
2) nextch
2) END;
2) END (*SKIPCOMMENT*);
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 17 line 188
1) BEGIN (*SKIP_E_DIRECTORY*)
1) WHILE NOT (ch = ';') DO
**** File 2) PASCAL.PAS[PAS,SYS], Page 20 line 197
2) VAR
2) oldlptfile: boolean;
2) BEGIN (*SKIP_E_DIRECTORY*)
2) oldlptfile := lptfile;
2) lptfile := false;
2) WHILE NOT (ch = ';') DO
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 17 line 196
1) END (*SKIP_E_DIRECTORY*);
1) \
1) BEGIN (*INSYMBOL*)
**** File 2) PASCAL.PAS[PAS,SYS], Page 20 line 209
2) lptfile := oldlptfile;
2) END (*SKIP_E_DIRECTORY*);
2) \
2) (*]INSYMBOL*)
2) BEGIN (*INSYMBOL*)
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 17 line 214
1) skipcomment (true,'"'); GOTO 111;
1) END;
**** File 2) PASCAL.PAS[PAS,SYS], Page 21 line 18
2) IF incondcomp THEN
2) BEGIN
1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 17,21
2) incondcomp := false;
2) nextch;
2) END
2) ELSE
2) skipcomment (true,'"');
2) GOTO 111;
2) END;
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 17 line 230
1) skipcomment (false,' '); GOTO 111; (* 2.,3.*)
1) END
**** File 2) PASCAL.PAS[PAS,SYS], Page 21 line 41
2) skipcomment (false,'*'); GOTO 111; (* 2.,3.*)
2) END
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 17 line 248
1) UNTIL NOT (ch IN lettersdigitsorleftarrow);
1) %34
**** File 2) PASCAL.PAS[PAS,SYS], Page 21 line 59
2) UNTIL NOT (ch IN identchars);
2) %34
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 17 line 488
1) BEGIN
1) sy := ssy[ch]; op := sop[ch];
1) nextch;
1) END;
1) OTHERS:
1) BEGIN
1) sy := ssy[ch]; op := sop[ch];
**** File 2) PASCAL.PAS[PAS,SYS], Page 21 line 299
2) GOTO 333;
2) OTHERS:
2) BEGIN
2) 333:
2) sy := ssy[ch]; op := sop[ch];
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 21 line 1
1) (* PARSING OF DECLARATIONS: LABELDECLARATION, CONSTANTDECLARATION, TYPEDECLARATION, VARIABLEDECLARATION *)
1) PROCEDURE labeldeclaration;
1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 21,25
**** File 2) PASCAL.PAS[PAS,SYS], Page 25 line 1
2) (* PARSING OF DECLARATIONS: LABELDECLARATION, CONSTANTDECLARATION, TYPEDECLARATION, VARIABLEDECLARATION, proceduredeclaration[parameterlist[ffparlist]] *)
2) PROCEDURE labeldeclaration;
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 22 line 1
1) (* BODY[GENERATE_WORD,INSERT_ADDRESS,INCREMENT_REGC,DEPOSIT_CONSTANT,MACRO..,PUT_PAGENUMBER,PUT_LINENUMBER,SUPPORT,ALFACONSTANT*)
1) PROCEDURE body(fsys: setofsys);
**** File 2) PASCAL.PAS[PAS,SYS], Page 26 line 1
2) (* BODY[GENERATE_WORD,INSERT_ADDRESS,INCREMENT_REGC,DEPOSIT_CONSTANT,MACRO..,PUT_PAGENUMBER,PUT_LINENUMBER,SUPPORT,ALFACONSTANT,ADDNEWCOUNTER*)
2) PROCEDURE body(fsys: setofsys);
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 23 line 127
1) PROCEDURE leavebody;
**** File 2) PASCAL.PAS[PAS,SYS], Page 27 line 128
2) PROCEDURE addnewcounter; FORWARD;
2) PROCEDURE leavebody;
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 23 line 138
1) lpcross_file,lpcross_device: alfa;
1) (* 28.*) \
**** File 2) PASCAL.PAS[PAS,SYS], Page 27 line 141
2) lpcreffile,lpcrefdevice: alfa;
2) (* 28.*) \
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 23 line 149
1) macro4(541B(*HRRI*),topp,basis,0);
**** File 2) PASCAL.PAS[PAS,SYS], Page 27 line 152
2) IF entercount THEN
2) BEGIN (* 28.*)
2) addnewcounter; entercount := false;
2) END;
2) macro4(541B(*HRRI*),topp,basis,0);
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 23 line 179
1) lpcross_file[i] := pcross_file[i];
1) IF i <= 6 THEN
1) lpcross_device[i] := pcross_device[i]
1) ELSE
1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 23,27
1) lpcross_device[i] := ' ';
1) END;
1) lpcross_file[10] := ' ';
1) lpcross_device[10] := ' ';
1) \
1) %24
1) END;
1) IF CROSS_REFERENCE THEN (* 21.*)
1) BEGIN
1) ALFACONSTANT(PCROSS_FILE);
1) (* 21.*) \
1) %13 alfaconstant(lpcross_file); \
1) macro2(551B(*HRRZI*),regin+1);
1) deposit_constant(strg,gattr);
1) %24 ALFACONSTANT(PCROSS_DEVICE); \
1) %13 alfaconstant(lpcross_device); \
1) macro2(551B(*HRRZI*),regin+2);
1) deposit_constant(strg,gattr);
1) macro3r(551B(*HRRZI*),regin+3,pcross_ppn);
1) macro3r(551B(*HRRZI*),regin+4,pcross_core);
1) support(runprogram);
**** File 2) PASCAL.PAS[PAS,SYS], Page 27 line 186
2) lpcreffile[i] := pcreffile[i];
2) IF i <= 6 THEN
2) lpcrefdevice[i] := pcrefdevice[i]
2) ELSE
2) lpcrefdevice[i] := ' ';
2) END;
2) lpcreffile[10] := ' ';
2) lpcrefdevice[10] := ' ';
2) \
2) %234
2) END;
2) IF cross_reference THEN (* 21.*)
2) BEGIN
2) \
2) %24
2) ALFACONSTANT(PCREFFILE);
2) (* 21.*) \
2) %13 alfaconstant(lpcreffile); \
2) macro2(551B(*HRRZI*),regin+1);
2) deposit_constant(strg,gattr);
2) %24 ALFACONSTANT(PCREFDEVICE); \
2) %13 alfaconstant(lpcrefdevice); \
2) macro2(551B(*HRRZI*),regin+2);
2) deposit_constant(strg,gattr);
2) macro3r(551B(*HRRZI*),regin+3,pcrefppn);
2) macro3r(551B(*HRRZI*),regin+4,pcrefcore);
1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 23,27
2) support(runprogram);
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 26 line 318
1) IF NOT error_flag AND NOT no_code_gen THEN
1) BEGIN (* 22. AVOID CODE GENERATION IN CASE OF AN ERROR.*)
**** File 2) PASCAL.PAS[PAS,SYS], Page 30 line 318
2) IF NOT errorflag AND NOT no_code_gen THEN
2) BEGIN (* 22. AVOID CODE GENERATION IN CASE OF AN ERROR.*)
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 26 line 356
1) END (* IF NOT ERROR_FLAG *)
1) ELSE
1) %13
1) IF error_flag THEN \
1) BEGIN
**** File 2) PASCAL.PAS[PAS,SYS], Page 30 line 356
2) END (* IF NOT ERRORFLAG *)
2) ELSE
2) %13
2) IF errorflag THEN \
2) BEGIN
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 28 line 232
1) PROCEDURE profuncall_support;
1) BEGIN (*PROFUNCALL_SUPPORT*)
1) IF (lsupport IN [readirange..wrtdset,readpseudostring..writedefpseudostring])
**** File 2) PASCAL.PAS[PAS,SYS], Page 32 line 232
2) PROCEDURE callsupport;
2) BEGIN (*CALLSUPPORT*)
2) IF (lsupport IN [readirange..wrtdset,readpseudostring..writedefpseudostring])
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 28 line 249
1) END (*PROFUNCALL_SUPPORT*);
1) PROCEDURE readreadln; (*READ A LIST OF PARAMETERS FROM A TEXT FILE*)
**** File 2) PASCAL.PAS[PAS,SYS], Page 32 line 249
2) END (*CALLSUPPORT*);
2) PROCEDURE readreadln; (*READ A LIST OF PARAMETERS FROM A TEXT FILE*)
***************
1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 28,32
**** File 1) PASCAL.BKP[PAS,SYS], Page 28 line 344
1) profuncall_support
1) EXIT IF sy <> comma;
**** File 2) PASCAL.PAS[PAS,SYS], Page 32 line 344
2) callsupport
2) EXIT IF sy <> comma;
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 28 line 408
1) generate_code( 200B (*MOVE*) , regin+3 , gattr ) ;
1) regc := gattr.reg ;
**** File 2) PASCAL.PAS[PAS,SYS], Page 32 line 408
2) generate_code( 200B (*MOVE*) , regc+1 , gattr ) ;
2) regc := gattr.reg ;
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 28 line 509
1) profuncall_support
1) EXIT IF sy <> comma;
**** File 2) PASCAL.PAS[PAS,SYS], Page 32 line 509
2) callsupport
2) EXIT IF sy <> comma;
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 29 line 43
1) IF NOT error_flag THEN
1) WITH fattr DO
**** File 2) PASCAL.PAS[PAS,SYS], Page 33 line 43
2) IF NOT errorflag THEN
2) WITH fattr DO
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 29 line 55
1) IF NOT error_flag THEN
1) WITH fattr DO
**** File 2) PASCAL.PAS[PAS,SYS], Page 33 line 55
2) IF NOT errorflag THEN
2) WITH fattr DO
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 29 line 105
1) IF NOT error_flag THEN
1) BEGIN
1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 29,33
**** File 2) PASCAL.PAS[PAS,SYS], Page 33 line 105
2) IF NOT errorflag THEN
2) BEGIN
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 29 line 133
1) IF NOT error_flag THEN
1) BEGIN
**** File 2) PASCAL.PAS[PAS,SYS], Page 33 line 133
2) IF NOT errorflag THEN
2) BEGIN
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 29 line 208
1) END (* IF NOT ERROR_FLAG *)
1) END (* PACKUNPACK *);
**** File 2) PASCAL.PAS[PAS,SYS], Page 33 line 208
2) END (* IF NOT ERRORFLAG *)
2) END (* PACKUNPACK *);
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 30 line 28
1) LOOP
**** File 2) PASCAL.PAS[PAS,SYS], Page 34 line 28
2) macro3(271b(*addi*),topp,topp_offset+1);
2) LOOP
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 30 line 44
1) macro4(202B(*MOVEM*),reg,topp,topp_offset + i);
1) IF first_expression THEN
**** File 2) PASCAL.PAS[PAS,SYS], Page 34 line 45
2) macro4(202B(*MOVEM*),reg,topp,0);
2) macro3(350b(*aos*),0,topp);
2) IF first_expression THEN
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 30 line 69
1) IF NOT error_flag THEN
1) BEGIN
1) insert_address(no, insert_size, topp_offset + i);
1) IF conversion THEN
**** File 2) PASCAL.PAS[PAS,SYS], Page 34 line 71
1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 30,34
2) IF NOT errorflag THEN
2) BEGIN
2) insert_address(no, insert_size, topp_offset + i+1);
2) macro3(275b(*subi*),topp,topp_offset+i+1);
2) IF conversion THEN
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 30 line 87
1) macro3(253B(*AOBJN*),regc,ic - 2);
1) IF conversion THEN gattr.typtr := realptr
**** File 2) PASCAL.PAS[PAS,SYS], Page 34 line 90
2) macro3r(253B(*AOBJN*),regc,ic - 2);
2) IF conversion THEN gattr.typtr := realptr
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 31 line 125
1) PROFUNCALL(<FILENAME>[,<DEVICE>[,<PROJECT-PROGRAMMER>[,<CORE-ASSIGNMENT]]])
1) ALLOWS TO EXIT FROM ONE PROGRAM AND EXECUTE ANOTHER *)
**** File 2) PASCAL.PAS[PAS,SYS], Page 35 line 125
2) CALL(<FILENAME>[,<DEVICE>[,<PROJECT-PROGRAMMER>[,<CORE-ASSIGNMENT]]])
2) ALLOWS TO EXIT FROM ONE PROGRAM AND EXECUTE ANOTHER *)
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 32 line 1
1) (*CALL_NON_STANDARD[COMPPARAM,CHECKSSTRINGCALLS,CHARCONSTANT] ]PROFUNCALL*)
1) PROCEDURE call_non_standard;
**** File 2) PASCAL.PAS[PAS,SYS], Page 36 line 1
2) (*CALL_NON_STANDARD[COMPPARAM,CHECKSSTRINGCALLS,CHARCONSTANT,saveexpr] ]PROFUNCALL*)
2) PROCEDURE call_non_standard;
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 32 line 13
1) FUNCTION compparam(fcp1,fcp2 : ctp):boolean;
**** File 2) PASCAL.PAS[PAS,SYS], Page 36 line 12
2) oldsstringstart,
2) oldparsingparameters: boolean;
2) FUNCTION compparam(fcp1,fcp2 : ctp):boolean;
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 32 line 93
1) BEGIN (* CALL_NON_STANDARD *)
**** File 2) PASCAL.PAS[PAS,SYS], Page 36 line 95
2) (* 25. put string expressions in memory, to be able to address them.*)
1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 32,36
2) procedure saveexpr;
2) var
2) lattr: attr;
2) begin (*saveexpr*)
2) with lattr do
2) begin
2) typtr := gattr.typtr;
2) kind := varbl;
2) vlevel := level;
2) dplmt := lc;
2) indexr := basis;
2) packfg := notpack;
2) indbit := 0;
2) vrelbyte := no;
2) lc := lc + typtr↑.size;
2) end;
2) if lcmax < lc then
2) lcmax := lc;
2) store(gattr.reg,lattr);
2) gattr := lattr;
2) regc := regc-1;
2) end (*saveexpr*);
2) BEGIN (* CALL_NON_STANDARD *)
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 32 line 96
1) pctp := fcp; (* 25.*)
**** File 2) PASCAL.PAS[PAS,SYS], Page 36 line 122
2) llc := lc ;
2) pctp := fcp; (* 25.*)
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 32 line 119
1) llc := lc ;
1) lc := lc + save_count ;
**** File 2) PASCAL.PAS[PAS,SYS], Page 36 line 146
2) lc := lc + save_count ;
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 32 line 139
1) parsingparameters := true; (* 25. *)
**** File 2) PASCAL.PAS[PAS,SYS], Page 36 line 165
2) oldparsingparameters := parsingparameters;
2) oldsstringstart := sstringstart;
2) parsingparameters := true; (* 25. *)
1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 32,36
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 32 line 161
1) IF NOT comptypes(idtype,nxt↑.idtype) THEN error(555)
1) ELSE
**** File 2) PASCAL.PAS[PAS,SYS], Page 36 line 189
2) IF NOT comptypes(idtype,nxt↑.idtype) THEN
2) error(555)
2) ELSE
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 32 line 167
1) IF language<>pascalsy THEN error(510)
1) ELSE
1) BEGIN
1) IF p=0 THEN macro3(514B(*HRLZ*),regc,basis)
1) ELSE
1) IF p=1 THEN macro4(514B(*HRLZ*),regc,basis,-1)
1) ELSE
1) IF p>1 THEN
1) BEGIN
1) macro4(550B(*HRRZ*),regc,basis,-1);
1) FOR i:=3 TO p DO macro4(550B(*HRRZ*),regc,regc,-1);
1) macro4(514B(*HRLZ*),regc,regc,-1)
1) END;
1) IF pfaddr=0 THEN
**** File 2) PASCAL.PAS[PAS,SYS], Page 36 line 196
2) IF language<>pascalsy THEN
2) error(510)
2) ELSE
2) BEGIN
2) IF p=0 THEN
2) macro3(514B(*HRLZ*),regc,basis)
2) ELSE IF p=1 THEN
2) macro4(514B(*HRLZ*),regc,basis,-1)
2) ELSE IF p>1 THEN
2) BEGIN
2) macro4(550B(*HRRZ*),regc,basis,-1);
2) FOR i:=3 TO p DO macro4(550B(*HRRZ*),regc,regc,-1);
2) macro4(514B(*HRLZ*),regc,regc,-1)
2) END;
2) IF pfaddr=0 THEN
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 32 line 234
1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 32,36
1) IF (typtr↑.bitsize = 7) AND (kind = cst) THEN
1) charconstant(chr(cval.ival));
1) load_address;
**** File 2) PASCAL.PAS[PAS,SYS], Page 36 line 264
2) if kind = cst then
2) begin
2) IF typtr↑.bitsize = 7 THEN
2) charconstant(chr(cval.ival));
2) end
2) else if kind = expr then
2) saveexpr;
2) load_address;
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 32 line 336
1) parsingparameters := false; (* 25.*)
1) IF sy = rparent THEN insymbol
**** File 2) PASCAL.PAS[PAS,SYS], Page 36 line 371
2) parsingparameters := oldparsingparameters; (* 25.*)
2) sstringstart := oldsstringstart;
2) IF sy = rparent THEN insymbol
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 32 line 366
1) macro3(515B(*HRLZI*),reg0,-number_of_parameters);
**** File 2) PASCAL.PAS[PAS,SYS], Page 36 line 402
2) if level > 1 then
2) macro4r(202b(*movem*),newreg,reg0,lc)
2) else
2) macro4(202b(*movem*),newreg,basis,lc);
2) lc := lc + 1;
2) if lc > lcmax then lcmax := lc;
2) macro3(515B(*HRLZI*),reg0,-number_of_parameters);
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 32 line 383
1) macro3(275B(*SUBI*),topp,topp_offset);
**** File 2) PASCAL.PAS[PAS,SYS], Page 36 line 425
2) if level > 1 then
2) macro4r(200b(*move*),newreg,reg0,lc)
2) else
2) macro4r(200b(*move*),newreg,basis,lc);
2) macro3(275B(*SUBI*),topp,topp_offset);
***************
1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 32,36
**** File 1) PASCAL.BKP[PAS,SYS], Page 32 line 423
1) lc := llc
1) END ;
1) gattr.typtr := fcp↑.idtype; regc := lregc
**** File 2) PASCAL.PAS[PAS,SYS], Page 36 line 469
2) END ;
2) lc := llc;
2) gattr.typtr := fcp↑.idtype; regc := lregc
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 32 line 446
1) getputresetrewrite;
1) 7, 8:
**** File 2) PASCAL.PAS[PAS,SYS], Page 36 line 492
2) BEGIN
2) getputresetrewrite;
2) IF no_right_parent THEN GOTO 666
2) END;
2) 7, 8:
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 33 line 215
1) WHILE (lrmin<cval.ival) DO
1) BEGIN
1) cstpart:=cstpart + [lrmin];
1) lrmin:=lrmin+1
1) END;
1) rangepart:=false
**** File 2) PASCAL.PAS[PAS,SYS], Page 37 line 215
2) IF lrmin > cval.ival THEN
2) error(451)
2) ELSE
2) WHILE (lrmin<cval.ival) DO
2) BEGIN
2) cstpart:=cstpart + [lrmin];
2) lrmin:=lrmin+1
2) END;
2) rangepart:=false
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 36 line 60
1) IF (klass = vars) AND (vlev = 0) AND (sy = arrow) AND
**** File 2) PASCAL.PAS[PAS,SYS], Page 40 line 60
2) IF klass = proc THEN profuncall(fsys,lcp)
1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 36,40
2) else
2) begin
2) IF (klass = vars) AND (vlev = 0) AND (sy = arrow) AND
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 36 line 65
1) IF lcp↑.klass = proc THEN profuncall(fsys,lcp)
1) ELSE assignment(lcp)
1) END;
**** File 2) PASCAL.PAS[PAS,SYS], Page 40 line 68
2) assignment(lcp);
2) end;
2) END;
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 36 line 271
1) counter := 1; startofcounts := lcmain;
**** File 2) PASCAL.PAS[PAS,SYS], Page 40 line 274
2) lcmain := lcmain + 32; (*to provide for space for temporaries*)
2) counter := 1; startofcounts := lcmain;
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 37 line 11
1) error_in_heading := true;
1) getnextline; ch := ' '; insymbol; reset_possible := false;
**** File 2) PASCAL.PAS[PAS,SYS], Page 41 line 11
2) needsaneoln := true;
2) getnextline; ch := ' '; insymbol; reset_possible := false;
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 37 line 123
1) IF NOT error_flag THEN
1) BEGIN
**** File 2) PASCAL.PAS[PAS,SYS], Page 41 line 123
2) IF NOT errorflag THEN
2) BEGIN
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 37 line 149
1) %24 ERROR_IN_HEADING := TRUE; (* 14.*) \
1) END;
1) block(NIL,blockbegsys + statbegsys-[casesy],[period,colon]);
1) error_exit := true; finishline;
1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 37,41
1) 111:
**** File 2) PASCAL.PAS[PAS,SYS], Page 41 line 149
2) %24 NEEDSANEOLN := TRUE; (* 14.*) \
2) END;
2) block(NIL,blockbegsys + statbegsys-[casesy],[period,colon]);
2) errorexit := true; finishline;
2) 111:
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 37 line 167
1) IF error_flag THEN (* 13.*)
1) no_code_gen := true
**** File 2) PASCAL.PAS[PAS,SYS], Page 41 line 167
2) IF errorflag THEN (* 13.*)
2) no_code_gen := true
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 38 line 52
1) rewrite(tempcore,pcross_tmpfile);
1) i := 1;
**** File 2) PASCAL.PAS[PAS,SYS], Page 42 line 52
2) rewrite(tempcore,pcreftmpfile);
2) i := 1;
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 38 line 64
1) source_file:6,'.NEW,',source_file:6,'.LST');
1) FOR i := 1 TO maxpcrossoption DO
1) IF option (pcross_option_name [i]) THEN
1) BEGIN
1) write (tempcore, '/',pcross_option_name [i]);
1) getoption (pcross_option_name [i], j);
1) IF j <> 0 THEN
**** File 2) PASCAL.PAS[PAS,SYS], Page 42 line 64
2) source_file:6,'.LST');
2) FOR i := 1 TO maxpcrefoption DO
2) IF option (pcrefoption_name [i]) THEN
2) BEGIN
2) write (tempcore, '/',pcrefoption_name [i]);
2) getoption (pcrefoption_name [i], j);
2) IF j <> 0 THEN
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 38 line 75
1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 38,42
1) (* 1., 4. PASS THE LINKER NAME TO PCROSS.*)
1) IF loadit THEN
**** File 2) PASCAL.PAS[PAS,SYS], Page 42 line 75
2) (* 1., 4. PASS THE LINKER NAME TO PCREF.*)
2) IF loadit THEN
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 38 line 92
1) call(pcross_file,pcross_device,pcross_ppn,pcross_core); (* 4.*)
1) END;
**** File 2) PASCAL.PAS[PAS,SYS], Page 42 line 92
2) call(pcreffile,pcrefdevice,pcrefppn,pcrefcore); (* 4.*)
2) END;
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 38 line 104
1) rewrite(tempcore,link_tmpfile);
1) writeln(tty);
**** File 2) PASCAL.PAS[PAS,SYS], Page 42 line 104
2) %12
2) REWRITE(TEMPCORE,LINK_TMPFILE);
2) \
2) writeln(tty);
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 38 line 221
1) REWRITE(TEMPCORE,PCROSS_TMPFILE);
1) I := 1;
**** File 2) PASCAL.PAS[PAS,SYS], Page 42 line 223
2) REWRITE(TEMPCORE,PCREFTMPFILE);
2) I := 1;
***************
**** File 1) PASCAL.BKP[PAS,SYS], Page 38 line 234
1) SOURCE_FILE:6,'.NEW,',SOURCE_FILE:6,'.LST');
1) FOR I := 1 TO MAXPCROSSOPTION DO
1) IF OPTION (PCROSS_OPTION_NAME [I]) THEN
1) BEGIN
1) WRITE (TEMPCORE, '/',PCROSS_OPTION_NAME [I]);
1) GETOPTION (PCROSS_OPTION_NAME [I], J);
1) IF J <> 0 THEN
**** File 2) PASCAL.PAS[PAS,SYS], Page 42 line 236
2) SOURCE_FILE:6,'.LST');
2) FOR I := 1 TO MAXPCREFOPTION DO
1) PASCAL.BKP[PAS,SYS] and 2) PASCAL.PAS[PAS,SYS] 9-07-79 12:33 pages 38,42
2) IF OPTION (PCREFOPTION_NAME [I]) THEN
2) BEGIN
2) WRITE (TEMPCORE, '/',PCREFOPTION_NAME [I]);
2) GETOPTION (PCREFOPTION_NAME [I], J);
2) IF J <> 0 THEN
***************